SED帮助:如何用另一个包含方括号的字符串替换字符串

时间:2011-10-12 10:54:21

标签: replace sed

我正在使用OSX,并且在尝试使用sed命令替换文件中的字符串时遇到问题。问题是替代字符串包含方括号。 特别是我想替换这个字符串“message --------------”( - 是空格)
用这个“消息------ [是]”

但如果我输入

sed "message              /s//message     \ [ yea ]" filein > fileout

我收到此消息:替换命令中的错误标志:'['

我试图在[之前]放一个\但是它没有用。有人可以帮忙吗?谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

sed 's/message    /&[ yea ]/g' filein > fileout

&是匹配的表达式。支架无需特殊处理。

我不清楚这些空间是如何处理的。以上只是将[ yea ]添加到固定长度的空间序列的末尾。如果首选用[ yea ]替换任意长度的空格序列的最后一个空格,则需要更复杂的命令:

sed 's/\(message \{1,\}\)       /\1[ yea ]/g' filein > fileout

这种情况下的想法是匹配具有两个部分的模式。首先是一个由\( \)括起来的小组,它会查找message后跟一个或多个空格(\{1,\}。这后面必须跟七个空格。当找到匹配的文本时,它被组的文本(\1,表示第一组)替换为[ yea ]。此处的策略可以适应其他搜索替换模式,例如,多个组或不同的文字。

答案 1 :(得分:0)

完全不计算空白:

echo "message         foo" | sed "s/message        /message [ yea ]/"
  

消息[yea] foo

替换命令是's / IN / OUT /',而'm ...'是未知的 - 没有m命令已知。成功的另一个关键是,用一个反斜杠掩盖单个字符[立即,之间没有空白。但是 - 在替换表达式的右侧,一个组没有多大意义,因此您不需要掩盖它们。