我想替换
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
但这是错误的。有没有更好的方法来直接搜索和替换字符串?
答案 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
时提及