使用sed`s`操作更改(完整路径名)行

时间:2016-07-11 17:44:37

标签: bash shell sed

我试图将#!/usr/bin/python更改为#!/usr/bin/python2.6

我尝试过以下命令行:

sed -i -e 's/.#!/usr/bin/python.*/#!/usr/bin/python2.6/' /usr/bin/yum

...返回以下错误:

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

我无法在Google的任何地方找到一个好的答案。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您收到此错误是因为seds/.#!/usr/b解释为您的第一个s earch&amp;替换命令,b不是命令的有效标志 实际上,这些命令的语法是s<delimiter><search pattern><delimiter><replace><delimiter><flags>,其中使用最广泛的<delimiter>/

您可以在搜索模式中转义/并替换字符串,这样它们就不会被解释为分隔符,但是由于您有很多这样的分隔符,我建议使用另一个分隔符。

例如,使用+作为分隔符,sed命令将变为sed -i -e 's+.#!/usr/bin/python.*+#!/usr/bin/python2.6+'

作为旁注,你命令中的第一个.可能是一个错误,因为shebang应该直接写在它出现的文件的开头。

答案 1 :(得分:1)

我假设您的行是您文件的第一行。使用GNU sed:

sed '1s/python$/&2.6/' file

如果你想编辑你的文件&#34;就地&#34;使用sed的选项-i