Awk
如何替換文件中的一行行?
我想將多行包含更改
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