我有一个bash脚本,我在其中调用sed对文本文件内容执行一些操作。但是我注意到,如果文件路径包含某些字符,则它们会被sed解释为指令而不是文字字符串。如何从bash脚本中转义这些字符?
有问题的脚本部分(其中$ I实际上被声明为循环中使用的增量):
$I=0
OUTPUT=folder/m_Filename"$I".h
sed -i '1s;^;TEXT_TO_PREPEND;' "$OUTPUT"
抛出:
sed: 1: "{folder/m_Filename0.h}": invalid command code m
在OS X El Capitan上运行脚本。
答案 0 :(得分:3)
某些版本的sed要求您在-i
选项后指定后缀,该选项将用于创建您已覆盖的文件的备份:
sed -i '.bak' '1s;^;TEXT_TO_PREPEND;' "$OUTPUT"
如果没有这个,可能会将sed命令解释为备份后缀,从而导致文件名被解释为sed命令。
如果您真的不想创建备份,那么您可以传递空字符串-i ''
。