![sed - 패턴 검색으로 찾은 줄에 대해 여러 교체를 수행하시겠습니까?](https://linux55.com/image/5433/sed%20-%20%ED%8C%A8%ED%84%B4%20%EA%B2%80%EC%83%89%EC%9C%BC%EB%A1%9C%20%EC%B0%BE%EC%9D%80%20%EC%A4%84%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%97%AC%EB%9F%AC%20%EA%B5%90%EC%B2%B4%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 내용이 포함된 파일이 있습니다.
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