我必须在Unix中使用sed
命令替换两个字符串之间存在的字符串。
我的输入是:
Apple'Mangoabcd'Orange'Mangoxyz'Lemon'
我使用的命令是
sed 's/Mango.*'"'"'/+XXXX'"'"'/'
我想要的输出是
Apple'XXXX'Orange'XXXX'Lemon'
我得到的输出是
Apple'XXXX'
我想在所有位置将'Mango+freetext'
替换为'XXXX'
。
答案 0 :(得分:0)
如果您只想替换Mango
,而您知道它是Mango
,那么您只需
sed 's/Mango/XXXX/g'
如果要替换自由文本不包含单引号Mango<freetext>
的{{1}},请执行以下操作:
'
我们在sed "s/'Mango[^']*/'XXXX/g"
之前添加了额外的引号,以确保排除诸如Mango
如果要替换单词'SquashedMangoJuice'
和Apple
之间的字符串,则必须做些不同:
Orange
或使用向后引用
sed "s/Apple'[^']*'Orange/Apple'XXXX'Orange/g"
原始命令失败的原因是sed "s/\(Apple'\)[^']*\('Orange\)/\1XXXX\2/g"
贪婪。我的意思是,组合sed
将选择所有内容,直到最后一个引号为止。也就是说,它将代表.*'
。罪魁祸首是Mango'Orange'
之后的最后一个引号。上面,我们通过将您的Orange
替换为.
来解决此问题。这意味着除引号[^']
以外的所有字符。