转义文字和'使用sed时

时间:2017-11-15 09:53:04

标签: bash sed

我在Gitbash for Windows中使用sed来运行标记某些字符串的XML文本。

其中一个问题是:

S. Margaret's

需要包含在这样的元素中:

<orgName id="16">S.Margaret's</orgName>

所以我的脚本写着:

sed -e 's/S. Margaret's/<orgName id="16">S. Margaret's<\/orgName>/g'

我已经在标签中转发了我需要插入的正斜杠。

这会抛出错误“orgName:No such file or directory”

我认为这个问题与玛格丽特的's /之后有关,后者被解释为新命令的开始,但我该如何逃避呢?我尝试了各种反斜杠组合但没有成功。

2 个答案:

答案 0 :(得分:2)

无法使用简单引号在字符串中转义

'。 shell将您的命令视为

sed -e 's/S. Margaret's/<orgName id="16">S. Margaret's<\/orgName>/g'
        ^^^^^^^^^^^^^
        string in single quotes
                        ^ redirection operator
                         ^^^^^^^ file name to read input from

通常的构造是'...'\''...'

答案 1 :(得分:2)

赞美AlexP's answer使用转义单引号,我认为您也可以对搜索/替换部分进行双引号,因为您没有任何需要在其中进行扩展的shell变量。这样您就不必担心转义单引号或空白区域。此外,由于替换文字涉及/字符,因此建议将sed默认分隔符从/更改为|或您选择的任何非元字符。

sed -e "s|S. Margaret's|<orgName id=\"16\">S. Margaret's</orgName>|g" file