用 sed 替换特殊字符

用 sed 替换特殊字符

我必须使用 shell 替换特殊字符,所以我使用 sed 但我有一些我不明白的错误。

<%_ by [@, ("_" = dash)
_%> by ]

对于前 2 个字符,我的合成是:sed -i y/\<%\/\]\/ test.htm 它可以工作,但是这里我如何添加破折号字符?第二个应该是这样,sed -i y/\%>\/\]\/ 但我有这个错误bash: /]/: is a folder ,你能帮我吗

答案1

我不确定您要替换什么(在第一种情况下用 - 或 _ ),但这对我来说效果很好:

$ echo "<%_" | sed 's/<%_/_/'
_
$ echo "<%_" | sed 's/<%_/-/'
-
$ echo "_%>" | sed 's/_%>/\]/'
]

看起来您正在转义正则表达式标识符(/)。

答案2

您需要引用该参数,并使用该s命令来执行字符串替换。您可以使用该-e选项来提供多个命令表达式。

sed -i -e 's/<% /[@/' -e 's/ %>/]/' filename

相关内容