尝试使用#替换行时s的未知选项

时间:2015-11-27 17:00:04

标签: bash shell sed

在bash脚本中,我正在尝试用新文本替换以注释开头的行。 sed没有告诉我哈希字符是Unknown option to s

sed -i -e "s/#a line/the new line with some $varname/g" "path/to/filename"

我在#上尝试过一次反斜杠无效。我如何使用sed哈希,是的,我必须使用双引号来管理变量的使用。

1 个答案:

答案 0 :(得分:3)

问题与#无关。您收到错误,因为您注入sed脚本的变量恰好包含/个字符。如果您知道某个字符肯定不会出现在模式或替换中,请将其用作s命令的分隔符。例如。假设|是安全的:

sed "s|#a line|the new line with some $varname|" file > file.tmp &&
mv file.tmp file

或者,c命令可用于更改整行:

sed "/#a line/c\\
the new line with some $varname" file > file.tmp &&
mv file.tmp file

或者更好,找到一种方法来做到这一点而不将数据注入代码(例如ed,ex或awk)