linux - 我在使用 Sed 时遇到问题

标签 linux string replace sed

我正在尝试使用 sed 命令来替换这一行:

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

与:

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

当我使用时:

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

这是行不通的。我认为经期搞砸了。我该如何解决这个问题?

最佳答案

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

所以把第一行改成第二行:

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

在这里,我添加了“g”以便它在全局范围内执行,即,如果同一行上有多个实例,所有实例都将被更改。如果您删除“g”,它只会更改每行中第一次出现的位置。

它从 filetochange 读取并写入 newfile

如果你这样做:

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

它会直接在“filetochange”中进行更改...但是请小心,写得不好的 sed -i 可能会弄乱文件并使其无法使用

关于linux - 我在使用 Sed 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221883/

相关文章:

linux - 将多行日志文件转换为 CSV

c - 使用系统单调时钟分析相对 C 代码执行时间

未打印出程序的返回值时计算的字符串长度不正确

jQuery 预替换

c - 查找并替换 C 中所有出现的子字符串

search - Emacs:如何删除以特定文本开头的行

c - Linux内核的list.h

带管道的 c 程序执行 "ps aux | grep firefox | tee processes.txt"

sql - 用逗号将一个字符串拆分为多列

java - 为什么 DataOutputStream.writeChars(str) 和 String(byte[]) 不使用相同的编码?