我正在尝试清理mongo数据库转储。我要替换字母数字字符后跟空格的所有'\“'。这是我到目前为止的东西
sed -e 's/[a-zA-Z0-9]\\"/ /g' a.txt
问题在于,此sed不仅替换了'\'',而且替换了紧接其前的一个字符,因此'mystring \'''变为'mystrin'。我想要输出'mystring'
答案 0 :(得分:0)
您可以在正则表达式模式中使用捕获组,并在替换部分中使用\1
占位符,以恢复字母数字字符:
sed -e 's/\([a-zA-Z0-9]\)\\"/\1 /g' a.txt
^^ ^^ ^^
您可以将[a-zA-Z0-9]
替换为[[:alnum:]]
,使正则表达式更加惯用([:alnum:]
与任何字母数字字符匹配)。
s='mystring\"'
sed -e 's/\([a-zA-Z0-9]\)\\"/\1 /g' <<< "$s"
# => mystring
sed -e 's/\([[:alnum:]]\)\\"/\1 /g' <<< "$s"
# => mystring