![텍스트 파일에서 미리 정의된 태그 사이의 줄 일부를 인쇄합니다.](https://linux55.com/image/15020/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%AF%B8%EB%A6%AC%20%EC%A0%95%EC%9D%98%EB%90%9C%20%ED%83%9C%EA%B7%B8%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EC%A4%84%20%EC%9D%BC%EB%B6%80%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
아래와 같은 파일이 있습니다
<g> Good wheatear </g> other parts of line
<g> The farm land is to be sold </g> other parts of line
<g> knock knock </g> other parts of line
내 출력이 다음과 같기를 원합니다.
<g> Good wheatear </g>
<g> The farm land is to be sold </g>
<g> knock knock </g>
즉, <g>와 </g> 태그 사이의 내용을 인쇄합니다(태그 포함).
나는 다음 명령을 시도했습니다.
awk '/<s>/, /<\/s>/' trsTest.txt
하지만 전체 줄을 인쇄합니다.
태그 사이에 내용을 인쇄하는 방법은 무엇입니까?
답변1
이를 통해 다음과 awk
같이 될 수 있습니다.
$ awk -v FS="</?g>" '{print $2}' trsTest.txt
Good wheatear
The farm land is to be sold
knock knock
또는 라벨을 유지하려는 경우:
$ awk -v FS="</g> " '{print $1 FS}' trsTest.txt
<g> Good wheatear </g>
<g> The farm land is to be sold </g>
<g> knock knock </g>
답변2
간단히 GNU grep을 사용하여 줄( )에서 일치하는 부분만 인쇄할 수 있습니다 -o
.
grep -o '<g>.*<\/g>' trsTest.txt
*
쉘이 다음과 같은 문자를 확장하지 못하도록 패턴은 작은따옴표 사이에 있어야 합니다.
첫 번째 명령은 다음을 생성합니다.
<g> Good wheatear </g>
<g> The farm land is to be sold </g>
<g> knock knock </g>
태그를 포함하지 않으려면 다음을 수행할 수 있습니다.
sed 's/.*<g>\(.*\)<\/g>.*/\1/' trsTest.txt
작동 방식은 다음과 같습니다.
<g>
시작 태그 앞의 모든 항목과 일치합니다(시작 태그 포함).\(
위의 내용을 사용했던 것을 기억합니다.\)
<\g>
닫는 태그부터 줄 끝까지 일치합니다 .- 그런 다음 기억나는 것으로 바꾸세요.
\1
두 번째 명령은 다음을 생성합니다.
Good wheatear
The farm land is to be sold
knock knock
답변3
XML인 경우 XML 파서를 사용할 수 있습니다 xmlstarlet
. 예를 들어 HTML인 경우에도 사용할 수 있지만 xmlstarlet
구조가 깨질 수 있다는 점을 경고해야 합니다.
<root/>
입력에 적합한 XML을 만들기 위해 테두리 요소를 추가했습니다 .
<root>
<g> Good wheatear </g> other parts of line
<g> The farm land is to be sold </g> other parts of line
<g> knock knock </g> other parts of line
</root>
그런 다음 </g>
요소와 값을 선택하는 명령은 다음과 같습니다.
xmlstarlet sel --template --match '//g' --copy-of '.' --nl file.xml
산출
<g> Good wheatear </g>
<g> The farm land is to be sold </g>
<g> knock knock </g>
xmlstarlet
Python이나 Python과 같은 범용 텍스트 구문 분석 도구 sed
에 비해 장점은 grep
XML 구조를 이해하므로 입력 파일이 약간 변경되었지만 여전히 유효한 XML로 남아 있으면 xmlstarlet
구문 분석이 가능하다는 것입니다.
답변4
레이블이 항상 동일한 경우 레이블을 포함하려면 sed를 사용하십시오.
sed 's/\(.*>\).*/\1/' trsTest.txt
출력은 다음과 같습니다
<g> Good wheatear </g>
<g> The farm land is to be sold </g>
<g> knock knock </g>
Quasimodo의 코드 블록을 보다 효율적으로 업데이트했습니다.