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

Replace SED帮助:如何用另一个包含方括号的字符串替换字符串,replace,sed,Replace,Sed,我正在使用OSX,在尝试使用sed命令替换文件中的字符串时遇到问题。问题是替换字符串包含一个方括号。 我特别想替换这个字符串“message-----------------”(-为空格) 有了这个“信息------[是]” 但是如果我打字 sed "message /s//message \ [ yea ]" filein > fileout 我收到以下消息:替换命令中的错误标志:'[' 我试着在[1]前面加一个\号,但没有用。有人能帮忙吗?谢谢!没有

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

但是如果我打字

sed "message              /s//message     \ [ yea ]" filein > fileout
我收到以下消息:替换命令中的错误标志:'['


我试着在[1]前面加一个\号,但没有用。有人能帮忙吗?谢谢!

没有准确地数空格:

echo "message         foo" | sed "s/message        /message [ yea ]/"
信息[是]福

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

尝试以下操作:

sed 's/message    /&[ yea ]/g' filein > fileout
&
是匹配的表达式。括号无需特殊处理

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

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

本例中的想法是匹配一个由两部分组成的模式。首先是一个组,由
\(\)
括起,它查找
消息
,后跟一个或多个空格(
\{1,\}
。后面必须紧跟七个空格。找到匹配文本后,将替换为组的文本(表示第一组的
\1
,后跟
[yea]
。此处的策略可适用于其他搜索替换模式,例如多个组或不同的文本。

您的sed命令格式不正确,但我收到不同的错误消息,“无效的命令代码m”.在文本中。检查我所做的编辑是否符合您的意图。如果我不清楚,很抱歉。是的,我明白了。如果您看到拼写错误,您可以更正它,如果不清楚它是否是故意的。我现在将删除我的第一条评论,作为“讨论噪音”。谢谢!实际上这是第二种情况,空格必须被替换。无论如何,它都是无效的rked。但现在我有另一个挑战…我必须用“/[yea]”替换字符串的最后9个空格,用斜杠!有什么想法吗?我已经扩展了解释,希望能让您更好地概括该命令。对于您的修改,您只需要将空格字符串扩展为9长,将替换文本扩展为
\[是的]
。顺便说一句,既然你是一个新用户,有几个技巧。关于堆栈溢出,你可以通过向上投票和/或接受答案来表示感谢。同样,最好通过编辑问题来修改或澄清问题,而不是在评论中。但不要对问题做过多的更改:堆栈溢出是一个问答网站,而不是论坛。