foo2
複数行の配列など、目的の出力に複数行の埋め込みを変更したいと思います
foo2
。 1行に変更する方法
- から:
$ 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
答え1
すべてのUnixシステムのすべてのシェルで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
答え2
そしてsed
:
sed -n '/^foo2=(/ba;p;d;:a N;/)$/!ba;s/\n//g;s/ */ /gp' file1
そしてperl
perl -pe '
$_ = /[)]$/ ? s/ */ /gr :
(substr $_, 0, -1) =~ s/ */ /gr
if /^foo2=[(]/ .. /[)]$/
' test
または、あなたのバージョンに代替修飾子がperl
ない場合:r
s
perl -pe '
$_ = /[)]$/ ? $_ : substr $_, 0, -1 and s/ */ /g
if /^foo2=[(]/ .. /[)]$/
' test