찾은 훌륭한 답변을 바탕으로여기sed
, 를 사용할 스크립트 파일에서 이러한 명령 중 일부를 사용해 보았습니다 sed -f
. 파일에 여러 sed
명령이 있고 문제 없이 계속 실행됩니다. 이제 파일 끝에 다음 두 줄을 추가해야 합니다.
/^$/{N;s/^$\nbegin of this/begin/g}
/^$/{N;s/^$\nend of this/end/g}
기본적으로 빈 줄( ^$
) 뒤에 begin of this
or 문구가 오는 것을 검색 end of this
한 후 빈 줄을 제거하고 begin
다음 줄을 or 로 바꾸는 작업을 진행합니다 end
.
각 명령은 문제 없이 독립적으로 실행되지만 스크립트 파일에 배치하면 문제가 발생합니다. 이전 명령 중 일부가 작동을 멈췄습니다(예: s/\\ \\ //g
문자열 삭제 \ \
). 더 중요한 것은 처음 두 줄의 명령 중 첫 번째 명령만 실행된다는 점입니다. 이유는 무엇입니까? 일부 명령줄 스위치가 누락되었나요 sed
? 동일한 스크립트 파일에 여러 줄 명령을 사용할 수 있습니까?
추가 "포인트"로서 두 개의 정규식 줄을 캡처 그룹으로 바꾸고 싶은 유혹을 받았지만 그것도 /^$/{N;s/^$\n(begin|end) of this/\1/g}
작동하지 않으며 명령줄에서 직접 실행할 수도 없습니다.
perl
나는 OR을 사용하지 않기 때문에 상대적으로 간단하고 실행 가능한 솔루션이 있기를 바랍니다. awk
그러나 이것이 자체 제한 사항이거나 sed
구현하기가 매우 복잡한 경우 (매우 마지 못해) 대안을 사용하겠습니다.
다음은 매우 기본적인 예제 텍스트입니다.
some text
begin of this
some more text
end of this
A sentence
Another sentence
결과는 다음과 같습니다.
some text
begin
some more text
end
A sentence
Another sentence
답변1
@seshoumara가 이 문제를 해결한 것 같아요. 그렇죠? 어쨌든 내가 이걸 생각해냈어
sed -r '/^$/{N; s/\n(begin|end) of this/\1/g}' file