다음과 같은 샘플 텍스트가 있다고 가정해 보겠습니다 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
마지막으로 입력 행을 읽은 이후 또는 조건 분기를 수행한 이후 성공적인 교체가 없는 경우에만 레이블로 분기합니다. 라벨을 생략할 수 있으며, 이 경우 다음 사이클이 시작됩니다.
t
GNU가 아닌 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
만 포함되며 해당 레코드는 억제되어야 합니다.