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