파일의 한 줄을 바꾸는 방법은 무엇입니까?

파일의 한 줄을 바꾸는 방법은 무엇입니까?

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없는 경우 :rs

perl -pe '
    $_ = /[)]$/ ? $_ : substr $_, 0, -1 and s/  */ /g 
        if /^foo2=[(]/ .. /[)]$/
' test

관련 정보