나는 상당히 초보자 문제에 직면하고 있는데 그것이 내 관심을 끌었습니다 :( xml 태그가 있는 파일이 있고 내가 발견했을 때:
</ac:image>
</a>
뒤에 </ac:image>
가 있고 </a>
가 있는 줄을 삭제합니다 </a>
.
이전에도 "a href"가 있었지만 그것은 매우 구체적이어서 sed와 match를 사용하여 제거했습니다. 이 시점에서 여러 줄 일치인 경우 어떻게 처리할지 궁금합니다. 일치하는 두 번째 줄을 선택하는 방법을 잘 모르겠습니다.
누군가 나에게 올바른 방향을 알려줄 수 있습니까?
답변1
항상 동일한 순서라면 놀랄 일도 아니며 XML 구문 분석이 필요하지 않으며 작동합니다 sed
.
항상 두 행의 쌍을 확인하려면 다음 N;P;D
패턴을 사용하십시오 sed
.
sed 'N;P;\_</ac:image>\n *</a>$_d;D' filename
어떻게 작동하나요?
N
다음 줄을 추가합니다. 일반적으로$!N
다음 줄이 있는지 확인하지만 귀하의 경우에는 문제가 되지 않습니다. 다음 줄이 없으면 특별한 일이 발생하지 않습니다.- 이제 버퍼에 두 줄이 있습니다.
P
첫 번째 줄을 인쇄하세요. \_</ac:image>\n *</a>$_d
d
주어진 두 줄 패턴(\n
줄 사이의 개행 문자)이 발견되면 패턴 공간이 제거됩니다. 첫 번째 줄이 인쇄되므로 패턴 공간을 제거하면 쌍의 두 번째 줄만 제거됩니다.- 마지막 문은 패턴이 일치하지 않는 경우에만 실행됩니다. 첫 번째 줄(및 개행)을 제거
D
하고 쌍의 두 번째 줄로 루프를 다시 시작하므로 모든 줄 쌍이 검사됩니다.
답변2
gsed '/<\/ac:image>/,+1 { /<\/a>$/d; }' testfile.txt
gsed
GNU 의 약자 입니다 sed
.