gpt4 book ai didi

linux - 在文件中搜索一行并将下一个模式匹配的行替换为 linux 中的换行符(Shell 脚本)

转载 作者:太空宇宙 更新时间:2023-11-04 10:33:42 24 4
gpt4 key购买 nike

我有一个包含以下数据的文件。我们将其命名为 myfile.xml :

.........
<header>unique_name</header>
......
somelines
......
<version>I need only this line</version>
......
......
<version>This is second match of version, which I dont want</version>

现在我正在寻找执行以下操作的 linux 命令:

  1. 可以有很多<header>.*</header>线。但我需要 <header>unique_name</header> .这是一个唯一的 header 名称,我将对其进行硬核处理。它在文件中只出现一次,但可以出现在文件中的任何位置。

  2. 搜索 <version>.*</version>出现在 <header>unique_name</header> 之后在 myfile.txt 中,这应该替换为 <version>new version number</version> .

我试过使用 grep 来实现, sed , awk ,但我做不到。请指教。

输入和预期输出:

输入文件“myfile.xml”:

  • stringtoFIND= <header>unique_name</header>
  • newversionNUMBER=new_version_number

myfile.xml文件内容如下:

<header>Some strings</header>
......Somelines...........
<version>I dont need this line, since header doesnt match stringtoFIND variable</version>

<header>unique_name</header>
.............
<version>I need only this line</version>
...........
..........
<version>I Dont need this line</version>
.........

预期输出

<header>Some strings</header>
......Somelines...........
<version>I dont need this line, since header doesnt match stringtoFIND variable</version>

<header>unique_name</header>
.............
<version>new_version_number</version>
...........
..........
<version>I Dont need this line</version>
.........

最佳答案

对第三个参数使用 GNU awk 来匹配 ():

$ cat tst.awk
match($0,/<header>(.*)<\/header>/,a) {
inBlock = (a[1] == "unique_name" ? 1 : 0)
}

inBlock && match($0,/(.*<version>).*(<\/version>.*)/,a) {
$0 = a[1] "new_version_number" a[2]
inBlock = 0
}

{ print }

$ awk -f tst.awk file
<header>Some strings</header>
......Somelines...........
<version>I dont need this line, since header doesnt match stringtoFIND variable</version>

<header>unique_name</header>
.............
<version>new_version_number</version>
...........
..........
<version>I Dont need this line</version>
.........

关于linux - 在文件中搜索一行并将下一个模式匹配的行替换为 linux 中的换行符(Shell 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com