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
답변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