Linux命令获取文件中的子字符串用于在文件中进一步替换

Linux命令获取文件中的子字符串用于在文件中进一步替换

a) 想要在以“Sune”开头的行之后的第一个“Kalle”行之前插入行“// VERSION 221204 NEW LINE”。

b) 还需要获取“任何子字符串”(单词)并使用它来替换上面 a) 中描述的行中的 VERSION。因此,上面添加的行应该是“// 221204 NEW LINE”

这是要编辑的文件的示例:

阿内

卡勒

Annika“任何子串”Anna(注释:Annika在文件中是唯一的)

西格

苏内·贝拉

卡勒

命令: sed '/Sune.*/,/Kalle/!b;/Kalle/i // VERSION 221204 NEW LINE' <file>

这是我得到的线路,到目前为止还可以。

阿内

卡勒

安妮卡丽莎安娜

西格

苏内·贝拉

// 版本 221204 新行

卡勒

但我还想要的是获取 Lisa() 并用它来替换 VERSION。所以新行应该是: // Lisa 221204 NEW LINE

这可以用来获取丽莎(<any substring>). | awk '/Annika /{print $(NF-1)}'

但这如何组合在一起呢?可以先获取“Lisa”并以某种方式保存,以供以后替换使用吗?

一艘班轮就很好了。我想要 bash、linux 命令,如 sed、awk...

答案1

使用sed

sed -E '{

/Kalle/!{n;b}
:A /Annika/!{n;bA}
:B /Sune/!{N;bB}
/Annika[[:space:]]+([[:alpha:]]+).*/{
  s//&\n\n\/\/ \1 221204 NEW LINE/
 }

}' file

单线:

sed -E '/Kalle/!{n;b}; :A /Annika/!{n;bA}; :B /Sune/!{N;bB}; /Annika[[:space:]]+([[:alpha:]]+).*/{s//&\n\n\/\/ \1 221204 NEW LINE/}' file

相关内容