sed:更改单词顺序并替换

时间:2012-08-15 13:18:16

标签: sed

我正在尝试更换;

randomtext{{XX icon}}

通过

randomtext{{ref-XX}}

..在一个文件中,其中XX可以是2或3个小写字母的任何序列。


我尝试用awk重新排列单词顺序,然后用sed替换“ref”的“icon”;

awk '{print $2, $1}'

..但是因为在第一个单词之前和第二个单词之后没有空格,所以它搞乱了大括号;

icon}} {{XX

使用sed实现此目的的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

 sed 's/{{\([a-z]\{2,3\}\)\sicon/{{ref-\1/'

这一个班轮使用替代命令s/PATTERN/REPLACE/{{匹配两个括号。 \([a-z]\{2,3\}\)捕获匹配2或3个小写字母的模式。 \s匹配空格。 icon匹配文字字符串“icon”。然后我们用文字字符串{{....icon和捕获的2或3个字母单词替换匹配,即{{ref-

答案 1 :(得分:1)

这是一个使用哈希标记(#)作为正则表达式分隔符的更通用的版本:

sed 's#{{\([^ ]*\) [^}]*#{{ref-\1#'
  • {{将正则表达式固定在双开花括号上。
  • \([^ ]*\)捕获所有内容直到空格。
  • [^}]*吃掉所有东西直到结束大括号。