다음 형식의 파일이 있습니다.
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
.