다른 줄에서 시작하고 끝나는 패턴 간 바꾸기

다른 줄에서 시작하고 끝나는 패턴 간 바꾸기

다음 형식의 파일이 있습니다.

Whatever1
Whatever2
Whatever3
binaries=(
text1
bin2
ohhh3
)
Whatever4
Whatever5
Whatever6

binaries=(내부 라인을 명령 출력으로 바꿔야 합니다 .)

다음과 같은 명령을 사용하여 다음 블록을 선택할 수 있습니다 sed -n -e '/binaries=(/,/)/p' filename.

binaries=(
text1
bin2
ohhh3
)

아니면 다음을 사용하는 것이 더 좋습니다 awk '/binaries/,/)/{if(!/binaries|)/)print}' filename:

text1
bin2
ohhh3

그런데 원본 파일을 다시 작성해야 하는데 어떻게 진행해야 할지 모르겠습니다.

답변1

GNU 사용 sed:

sed '/binaries=(/,/)/{
       //!d
       /)/e uname
     }'

귀하의 명령으로 바꾸십시오 uname.

답변2

예를 들어 다음과 같이 awk를 사용합니다.

awk '
  f && /)/ { f=0 }
  !f
  !f && /binaries=\(/ { f=1 ; p=1 }
  p { system ("your_command") ; p=0 }
'

여기서 "your_command"는 대체를 정의합니다.

설명: 이 플래그는 f상태 머신을 제어합니다. 설정된 경우 교체해야 하는 블록에 있습니다. 시작 패턴과 끝 패턴이 일치하면 그에 따라 플래그가 변경됩니다. 블록 내부에 있는 동안 시스템 호출이 실행됩니다. 이 플래그는 p한 번만 인쇄하는 데 사용됩니다.

원본 파일을 바꾸려면 새 파일을 만들고 원본 파일을 덮어쓰거나 awk최신 버전의 GNU를 옵션과 함께 사용하세요 -i inplace.

관련 정보