我在Sed遇到麻烦

时间:2014-10-06 17:50:42

标签: linux string replace sed

我正在尝试使用sed命令替换此行:

charmm.c36a4.20140107.newcali4.fixhcali.grange.b

使用:

charmm.20140911.c36a4.3rd.ghost2.model3rd 

当我使用时:

sed -i '/s/firstline/secondline/g' 

它不起作用。我认为这段时间搞得一团糟。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

sed使用正则表达式,因此.匹配任何字符。如果您只想匹配.字符本身,请告诉sed查找\.

所以要将第一行改为第二行:

sed -e 's/charmm\.c36a4.20140107\.newcali4\.fixhcali\.grange\.b/charmm.20140911.c36a4.3rd.ghost2.model3rd/g' < filetochange >newfile

在这里,我添加了&#34; g&#34;所以它是全局的,也就是说,如果在同一行上有多个实例,则所有实例都将被更改。如果你删除&#34; g&#34;,它只会改变每一行的第一次出现。

它从filetochange读取并写入newfile

如果你这样做:

sed -i -e 's/charmm\.c36a4.20140107\.newcali4\.fixhcali\.grange\.b/charmm.20140911.c36a4.3rd.ghost2.model3rd/g' filetochange 

它将直接在&#34; filetochange&#34;中进行更改。 ...但是请小心,写得不好的sed -i会弄乱文件并使其无法使用

答案 1 :(得分:-1)

s命令遵循以下语法:

s/pattern/replacement/

您需要将/放在sed命令前面。