如何使用 sed 和/或 awk/grep 来编辑匹配字符串后面的行?

如何使用 sed 和/或 awk/grep 来编辑匹配字符串后面的行?

我有一个大型文本文件需要进行一些更改。我需要先找到具有特定通用字符串的行,然后直接编辑该行。例如,如果我运行以下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

相关内容