Awk

如何替換文件中的一行行?

  • March 4, 2022

我想將多行包含更改foo2為所需的輸出

foo2就像多行中的數組一樣,如何將其更改為一行

  • 從:
$ cat file.txt
foo1=bar1
foo2=('bar10: some text here'
     'bar11: anther text here'
      ...
     'bar: final text here')
foo3=('bar3')
foo=1.2.33
  • 至:
foo1=bar1
foo2="bar10 bar11 .. bar"
foo3=('bar3')
foo=1.2.33

在每個 Unix 機器上的任何 shell 中使用任何 awk 並假設...輸入中的行和..輸出中的字元串實際上並不存在於您的真實數據中,並且旨在表示與它們周圍的文本相似的文本:

$ cat tst.awk
(val=="") && /.*\047$/ {
   tag = $0
   sub(/=.*/,"",tag)
   val = ""
}
tag != "" {
   split($0,f,/[\047:]/)
   val = (val == "" ? "" : val " ") f[2]
   if ( /\)$/ ) {
       print tag "=\"" val "\""
       tag = ""
   }
   next
}
{ print }
$ awk -f tst.awk file.txt
foo1=bar1
foo2="bar10 bar11 bar"
foo3=('bar3')
foo=1.2.33

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