如何使用正则表达式替换字符串的一部分

时间:2019-02-12 17:23:59

标签: regex sed

我正在尝试清理mongo数据库转储。我要替换字母数字字符后跟空格的所有'\“'。这是我到目前为止的东西
sed -e 's/[a-zA-Z0-9]\\"/ /g' a.txt
问题在于,此sed不仅替换了'\'',而且替换了紧接其前的一个字符,因此'mystring \'''变为'mystrin'。我想要输出'mystring'

1 个答案:

答案 0 :(得分:0)

您可以在正则表达式模式中使用捕获组,并在替换部分中使用\1占位符,以恢复字母数字字符:

sed -e 's/\([a-zA-Z0-9]\)\\"/\1 /g' a.txt
          ^^           ^^    ^^

您可以将[a-zA-Z0-9]替换为[[:alnum:]],使正则表达式更加惯用([:alnum:]与任何字母数字字符匹配)。

Online sed demo

s='mystring\"'
sed -e 's/\([a-zA-Z0-9]\)\\"/\1 /g' <<< "$s"
# => mystring
sed -e 's/\([[:alnum:]]\)\\"/\1 /g' <<< "$s"
# => mystring