1

我正在尝试替换;

randomtext{{XX icon}}

经过

randomtext{{ref-XX}}

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


我尝试用 awk 重新排列词序,然后用 sed 将“icon”替换为“ref-”;

awk '{print $2, $1}'

..但是由于第一个单词之前和第二个单词之后都没有空格,所以它弄乱了大括号;

icon}} {{XX

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

4

2 回答 2

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

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

于 2012-08-15T13:27:48.577 回答
1

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

sed 's#{{\([^ ]*\) [^}]*#{{ref-\1#'
  • {{将正则表达式锚定在双开花括号上。
  • \([^ ]*\)捕获所有内容,直到一个空间。
  • [^}]*吃完所有东西,直到结束花括号。
于 2012-08-15T14:41:17.713 回答