使用SED替换文本

时间:2017-02-08 10:43:32

标签: regex linux unix sed grep

我需要在一行文本中替换包含?:?'???+等字符串的模式。

如果?:那么它应该是:?'然后是'??,那么??++
我试过了 sed -i 's/\?:/:/g'
sed -i "s/\?'/'/g"
sed -i 's/\??/?/g'
sed -i 's/\?+/+/g'

虽然's/\?:/:/g'sed -i "s/\?'/'/g"工作正常但我在使用sed -i 's/\??/?/g'sed -i 's/\?+/+/g'时遇到了一些问题。
图案未被正确替换。
请帮忙。 感谢。

2 个答案:

答案 0 :(得分:1)

使用perl,你可以这样做:

perl -api -e  "s/\?(?=[:'?+])//g" file.txt

这将删除?:'?

之后的所有问号+

答案 1 :(得分:0)

使用sed:

sed -i -r "s/\?([\?:\+'])/\1/g" input_file.txt

它会修改input_file.txt到位(-i)并使用扩展的正则表达式(-r),因此需要转义?+。< / p>

如果找到模式,它会用第二个字符替换整个模式。