如何使用sed替换特定单词后的文本?


Answers:


18

搜索以开头的行projdir,并用新行替换整个行:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^并且$是行首/行尾标记,因此样式将与整行匹配;.*匹配任何东西。该-i通知sed直接写的变化.ignore,而不是仅仅将它们输出


如果将long选项用于-i--in-place则示例将更加自我记录。
伊利亚·林恩

5

一种方法是使用要保留的部分的反向引用来重写整行:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

另一种方法是重写该行的该部分,但前提是其他部分匹配:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

两个示例都在第一个单词为的行上重写了第二个以空格分隔的单词projdir


3

尽管这是一篇过时的文章,并且似乎可以通过已接受的答案为您解决,但实际问题尚未得到解答。因此,为了完整性并帮助他人:

这里的答案实际上与“ Snake”匹配,而不与“ projdir”开头的行匹配...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

这将从“ Snake”行开始的所有内容替换为“ Snake” +“ PacMan”之前的所有内容。\ 1代表()中匹配的内容。“蛇”之后的所有内容均保持不变。


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir是查找以字符串projdir开头的行。那里的。* $代表同一行中projdir之后的字符串。字符串projdir PacMan是我们要替换的字符串。g代表全局-替换所有以projdir开头的行。.ignore是文件名


1
能否请您扩大答案并阐明什么是什么?
罗密欧·尼诺夫

如果答案包含有关命令或代码段的工作方式和原因的解释,则答案将更为有用。
Anthony Geoghegan

我希望这在编辑后会更有用
Tinu'1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.