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