我正在尝试更换;
randomtext{{XX icon}}
通过
randomtext{{ref-XX}}
..在一个文件中,其中XX可以是2或3个小写字母的任何序列。
我尝试用awk重新排列单词顺序,然后用sed替换“ref”的“icon”;
awk '{print $2, $1}'
..但是因为在第一个单词之前和第二个单词之后没有空格,所以它搞乱了大括号;
icon}} {{XX
使用sed实现此目的的最简单方法是什么?
答案 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#'
{{
将正则表达式固定在双开花括号上。\([^ ]*\)
捕获所有内容直到空格。[^}]*
吃掉所有东西直到结束大括号。