我有一个文件,我想在其中找到并替换非常特定的行。我提供了一个简化的文件,在下面将其称为test.in。如果要手动执行此操作,则将找到“ log 3”,然后从该位置开始找到“旧字符串”,然后将其替换为“新字符串”。实际上,文件很大,在LOG号和旧字符串之间有很多信息,但是这些是唯一的标识符。
*LOG 1
old string
old string
*LOG 2
old string
old string
old string
*LOG 3
old string [Want to replace this with "new string"]
*LOG 4
old string
old string
我考虑过使用以下内容:
grep -A 700 "*LOG 3" test.in | sed '0,/old string/{s/old string/new string/}'
但是对我来说这不起作用,因为我需要更正整个文件。我还在这些页面上遇到了以下内容:
awk '/old string/{count++;if(count==3){sub("old string","new string")}}1' test.in
但是,这也无法正常工作,因为它假设在我需要替换的字符串之前,我知道有多少个“旧字符串”-实际上,我没有,因为有许多不同的文件。
I cannot只是用行空间和旧字符串找到LOG 3并以这种方式替换它,因为LOG 3和旧字符串之间存在大量不同的信息。
有一种简单的方法可以找到一些东西,然后从该新位置再次搜索,然后使用sed / awk并保存整个文件。
非常感谢:)
您能不能尝试以下操作。