sed 返回以下错误 sed: -e expression #1, char 101: Unknown option to `s'

sed 返回以下错误 sed: -e expression #1, char 101: Unknown option to `s'

<p>我正在编写一个脚本来用某些文本文件中的路径替换标签( *.prop)。但是,当我运行它时,出现以下错误:

sed: -e expression #1, char 101: unknown option to `s'

我的代码如下:

sed -i --  "s/<q>$(echo $destpath | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')/\ResultsTesting/\/g" *.prop

如果我打印代码的回显:

sed -i -- \
s/<q>\/home-students\/rmorales\/testAPK\/air.air.air.com.tabc.gsn-2014_5_11-dex2jar\/ResultsTesting\//g \
myFile.prop

有人能帮助我吗?

答案1

我会这样做:

printf %s\\n "$destpath" |
sed -e 's|[]\$/^.*[]|\\&|g' \
    -e 's|.*|s/<q>&/ResultsTesting\\//|' |
sed -i -- -f- myfile.prop

(部分)你的问题是你(显然)引用错误的一方。对于替换语句的左侧,s///您需要转义以下字符:

$^.*\[] delimiter

前两个只需要在某些位置转义,但在其他位置转义它们也没有什么坏处,所以你不妨全部转义。/按照惯例,命令中的分隔符是- 。

对于右侧,您需要转义:

\& delimiter newline

这似乎就是你想要做的(尽管报价需要一些工作)。虽然确实没有办法逃避 LHS 中的换行符(除了将其完全替换为替换转义字符串之外\n,它们可以在 RHS 上转义。但您正在将转义文本插入 LHS 中。

在上面的示例中,我使用两个seds - 和你一样 - 但不是就地命令替换,而是通过从左到右的管道输入命令(通常是我的偏好)并使用开关sed在标准输入上获取生成的脚本-f-

相关内容