我正在使用OSX,并且在尝试使用sed命令替换文件中的字符串时遇到问题。问题是替代字符串包含方括号。
特别是我想替换这个字符串“message --------------”( - 是空格)
用这个“消息------ [是]”
但如果我输入
sed "message /s//message \ [ yea ]" filein > fileout
我收到此消息:替换命令中的错误标志:'['
我试图在[之前]放一个\但是它没有用。有人可以帮忙吗?谢谢!
答案 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命令已知。成功的另一个关键是,用一个反斜杠掩盖单个字符[立即,之间没有空白。但是 - 在替换表达式的右侧,一个组没有多大意义,因此您不需要掩盖它们。