在sed中替换正斜杠的字符串

时间:2015-07-22 14:11:14

标签: linux shell awk sed

我想替换

x.y.z.zz=/a/b/c/d/

x.y.z.zz=/a/b/e/d/

我提前知道x.y.z.zz。我也提前知道了行号。 我试过这个

sed  "11s/.*/x.y.z.zz=\/a\/b\/e\/d\/" filename

但这是错误的。有没有更好的方法来直接搜索和替换字符串?

2 个答案:

答案 0 :(得分:5)

sed使用sed 's/pattern/replacement/'语法替换。在您的情况下,您错过了最后一个/。所以说这会起作用:

sed '11s/.*/x.y.z.zz=\/a\/b\/e\/d\//' file
                                   ^

但是,使用其他分隔符可能更清晰,因此语法更清晰。那么#呢? (它也可以是~_等):

sed '11s#.*#x.y.z.zz=/a/b/e/d/#' file

测试

$ cat a
a
x.y.z.zz=/a/b/c/d/
b
c

让我们替换第2行:

$ sed '2s#.*#x.y.z.zz=/a/b/e/d/#' a
a
x.y.z.zz=/a/b/e/d/
b
c

答案 1 :(得分:2)

如果你知道你的输入总是有“x.y.z.zz = / a / b / c / d”,你可以用c替换e
例如只执行sed s/c/e/
只会将c替换为行中的e。此外,您无需始终更改整行。您只需更改文本中的字符或单词即可。
另外,如果一行包含多个字符/单词,则此命令仅更改第一个字符/单词。如果输入字符串为x.y.z.zz=/a/b/c/d/c,则执行sed s/c/e/将具有输出x.y.z.zz=/a/b/e/d/c

如果需要更改所有事件,则需要在g命令中添加sed(全局)例如sed s/c/e/g将提供输出x.y.z.zz=/a/b/e/d/e

如果sed仅需要针对特定​​行执行,则sed命令中应提及行号本身就像在问题中所做的那样。

这是链接(http://www.grymoire.com/Unix/Sed.html),我总是在提到sed时提及