sed: 하나의 명령으로 조건부 줄 삭제

sed: 하나의 명령으로 조건부 줄 삭제

다음과 같은 샘플 텍스트가 있다고 가정해 보겠습니다 example.txt.

<para>This is some paragraph text
This is another line of paragraph text.
</para>

내가 달성하고 싶은 것: 모든 태그를 빈 문자열로 바꾸고 <para>결과 </para>행이 비어 있으면 행을 삭제합니다. 다음 두 명령을 사용하여 이를 달성했습니다.

# remove the line that solely consist of the para tag.
$ sed -i '/^<para>$/d;/^<\/para>$/d' ./example.txt

# Replace any of the para tags with an empty string.
$ sed -i 's/<para>//g;s/<\/para>//g' ./example.txt

내 질문: sed 명령에서 조건부 줄 삭제를 사용하여 이를 달성할 수 있습니까?

답변1

GNU sed가 있는 경우 T교체가 실패할 경우 다음 명령을 사용하여 빈 줄 제거로 분기할 수 있습니다.

sed 's/<\/\{0,1\}para>//g;T;/^$/d' example.txt
T label

마지막으로 입력 행을 읽은 이후 또는 조건 분기를 수행한 이후 성공적인 교체가 없는 경우에만 레이블로 분기합니다. 라벨을 생략할 수 있으며, 이 경우 다음 사이클이 시작됩니다.

tGNU가 아닌 sed를 사용하면 합계를 결합하여 동일한 작업을 수행하는 것이 가능해야 합니다.b

sed -e 's/<\/\{0,1\}para>//g;ta;b' -e ':a;/^$/d' example.txt

답변2

GNU sed 사용:

$ sed -nE 's|</?para>||g;/./p' file

필요한 대체 작업을 수행한 후 남은 내용이 있으면 인쇄하세요. 현재 행이라고도 불리는 패턴 공간인 OTW에는 태그만 포함되거나 para태그 /para만 포함되며 해당 레코드는 억제되어야 합니다.

관련 정보