awd / sed查找,然后从该点再次查找

问题描述 投票:0回答:1

我有一个文件,我想在其中找到并替换非常特定的行。我提供了一个简化的文件,在下面将其称为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并保存整个文件。

非常感谢:)

bash awk sed
1个回答
0
投票

您能不能尝试以下操作。

© www.soinside.com 2019 - 2024. All rights reserved.