Shell-Script

使用 ansible 或 unix 命令在文件中特定模式的每次匹配後插入行

  • August 5, 2021

我試圖在文本文件中每次出現特定字元串後插入一行。我嘗試使用lineinfileansible 模組,但它只能在文件中匹配字元串的最後一個或第一個實例之後插入一行。有誰知道我如何使用 shell 腳本或 ansible playbook 來實現這一點。我正在使用 linux 作業系統,因此任何解決此問題的 unix 命令都會有所幫助。

如下所示,我試圖在以mba開頭的每一行之後插入foo

原始txt文件內容:

foo
ab
zz
foo='dummy'
cd
zz
foo='dats'
lm
xx

所需輸出:

foo
mba
ab
zz
foo='dummy'
mba
cd
zz
foo='dats'
mba
lm
xx

基於awk- 的解決方案可能如下所示:

awk '{print} /^foo/{print "mba"}' input.txt

這將預設列印目前行,但如果它恰好以 開頭foo,它還將mba在處理繼續到下一行之前列印在附加行上。

幾個選擇:

  • perl
$ perl -pe 's/^foo.*/$&\nmg/' file
foo
mg
ab
zz
foo='dummy'
mg
cd
zz
foo='dats'
mg
lm
xx
  • awk
$ awk '1;/^foo/{print "mg" }' file
foo
mg
ab
zz
foo='dummy'
mg
cd
zz
foo='dats'
mg
lm
xx

引用自:https://unix.stackexchange.com/questions/663409