我有一个大型文本文件需要进行一些更改。我需要先找到具有特定通用字符串的行,然后直接编辑该行。例如,如果我运行以下grep
命令:
# grep -A1 important_string gianttextfile.txt
important_string
change_this
我想先找到important_string
,然后将其修改change_this
为其他内容,在文档中多次进行。我无法修改所有change_this
条目,因为其中许多条目需要保持原样,我只需要更改此特定字符串后面的条目。
实现这一目标的最佳方法是什么?
答案1
sed '/important_string/ {n;s/change_this/new_value/}'
笔记:
记住
important_string
并被change_this
解析为正则表达式。任何
s
执行的行都是不是测试了important_string
,所以它不能触发s
下一行。这意味着像这样的代码片段:… foo # this line does not trigger s for the next line important_string # this line triggers s for the next line important_string # s is performed here change_this # s in not performed here …
不会改变。一个始终测试的变体
important_string
是sed ':start; /important_string/ {n;s/change_this/new_value/;b start}'
如果
s
可以important_string
出现或消失,那么您可能希望测试important_string
替换前和/或替换后;或者不测试是否s
成功替换。此答案并未涵盖所有这些情况。如果需要就使用
s/…/…/g
。如果需要就使用
sed -i … file
。