我经常使用GNU Sed工具在进行原地替换时遇到一些问题。这次,我尝试从类似以下xml条目中删除一些逗号:
<address>T/A Business Name, 74, Address Line 1, Some Town, Some City</address>
...特别是地址数字后面的逗号(例如74后面的逗号)需要被移除。因此我使用类似以下的方式:
sed -nr 's!(<address>T/A\s+.*?,\s*[0-9]+\s*),(.*</address>)!\1\2! p'
这将按照我所期望的方式打印出将要更改的行,即删除地址编号后面的逗号。但当我更改命令以实际对文件进行就地更改时,如下所示:
sed -ir 's!\(<address>T/A\s+.*?,\s*[0-9]+\s*\),\(.*</address>\)!\1\2!'
但是这个命令没有任何作用。除了我必须在这次转义捕获括号,否则每个匹配的行都会出现错误,但它是完全相同的命令:
sed: -e expression #1, char 62: invalid reference \2 on `s' command's RHS