转义sed输出文件名中的字符

时间:2016-09-08 14:06:46

标签: bash sed

我有一个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上运行脚本。

1 个答案:

答案 0 :(得分:3)

某些版本的sed要求您在-i选项后指定后缀,该选项将用于创建您已覆盖的文件的备份:

sed -i '.bak' '1s;^;TEXT_TO_PREPEND;' "$OUTPUT"

如果没有这个,可能会将sed命令解释为备份后缀,从而导致文件名被解释为sed命令。

如果您真的不想创建备份,那么您可以传递空字符串-i ''

相关问题