sed, awk 또는 grep을 사용하여 특정 패턴을 삭제하고 나머지는 모두 유지하는 방법

sed, awk 또는 grep을 사용하여 특정 패턴을 삭제하고 나머지는 모두 유지하는 방법

메시지만 빼고 다 삭제하고 싶어요. 예를 들어 다음과 같은 경우가 있습니다.

<p class="TweetTextSize  js-tweet-text tweet-text" lang="en" data-aria-label-part="0">.<a href="/TuckerCarlson" class="twitter-atreply pretty-link js-nav" dir="ltr" data-mentioned-user-id="22703645" ><s>@</s><b>TuckerCarlson</b></a>: &quot;Massive demographic change has political consequences.&quot; <a href="/hashtag/Tucker?src=hash" data-query-source="hashtag_click" class="twitter-hashtag pretty-link js-nav" dir="ltr" ><s>#</s><b>Tucker</b></a><a href="https://t.co/PKqNgaihMQ" class="twitter-timeline-link u-hidden" data-pre-embedded="true" dir="ltr" >pic.twitter.com/PKqNgaihMQ</a></p>

명령을 사용한 후의 결과는 다음과 같아야 합니다.

Massive demographic change has political consequences.

지금까지의 나의 시도

sed -n "/<p class="TweetTextSize  js-tweet-text tweet-text" lang="en" data-aria-label-part="0">/,/<\/p>/p">>

내가 하려는 것은 <> </>사이의 모든 패턴 안에 있는 것을 삭제 <p> </p>하고 나머지는 유지하는 것입니다. 쉽지 않은 것 같지만 도움을 주시면 감사하겠습니다.

답변1

사용하는 솔루션xmstarlet도구:

xmlstarlet sel -t -v "/p/text()[2]" -n file | sed 's/.*"\(.*\)"/\1/'

출력:

Massive demographic change has political consequences.

sel옵션

sel(또는 선택) - 데이터 선택 또는 XML 문서(XPATH 등) 쿼리

-t--템플릿 옵션

-v옵션

-v 또는 --value-of - XPATH 표현식의 값을 인쇄합니다.


/p/text()[2]- XPath 표현식은 단락의 두 번째 텍스트 노드를 선택합니다(첫 번째 텍스트 노드는 .).

sed 's/.*"\(.*\)"/\1/'- 큰따옴표 사이의 메시지를 추출하려면

관련 정보