我在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 /之后有关,后者被解释为新命令的开始,但我该如何逃避呢?我尝试了各种反斜杠组合但没有成功。
答案 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