sed - 패턴 검색으로 찾은 줄에 대해 여러 교체를 수행하시겠습니까?

sed - 패턴 검색으로 찾은 줄에 대해 여러 교체를 수행하시겠습니까?

다음과 같은 내용이 포함된 파일이 있습니다.

name=MOD0

내가 관심을 갖지 않는 추가 라인이 많이 있습니다. 이 줄을 다음으로 변환해야 합니다.

[MOD0]

파일에서 다른 모든 줄을 제거하십시오. MOD0 부분은 예측할 수 없으므로 ^name= 패턴을 통해 해당 줄을 일치시켜야 합니다. 한 번의 교체("name=" 제거)를 수행할 수 있지만, 여전히 동일한 일치 라인에 있는 다른 작업(괄호로 묶음)을 수행하도록 sed에 지시하려면 어떻게 해야 합니까? 다음 명령은 각 줄을 대괄호로 묶습니다.

sed -n -e '/^name=/ s/^name=//p; s/^.*$/\[&\]/p'

답변1

중괄호 사용:

sed -n '
   /^name=/ {
     s///p
     s/.*/[&]/p
   }'

빈 검색 패턴(예: s///p)은 마지막 패턴을 재사용합니다.

또는:

 sed '/^name=/!d;s///p;s/.*/[&]/'

(즉, 시작하지 않는 줄을 제거한 name=다음 나머지를 처리합니다.)

단지 출력 name=xxx없이 바꾸려면 다음을 수행할 수 있습니다.[xxx]xxx

sed -n 's/^name=\(.*\)/[\1]/p'

(또는 p위의 다른 명령 중에서 첫 번째 명령에 대한 플래그를 제거하십시오).s

관련 정보