아래 출력에서 grep을 수행하고 비활성화된 문자열을 인쇄하고 싶습니다.
$ grep "s_icsmstatus" $CONTEXT_FILE
<oa_service_status oa_var="s_icsmstatus">disabled</oa_service_status>
나는 다음과 같은 것을 사용할 수 있습니다
$ grep "s_icsmstatus" $CONTEXT_FILE | awk -F ">" '{print $(NF-1)}' | awk -F "</" '{print $(NF-1)}'
disabled
하지만 이 작업을 수행하는 다른 간단하고 직접적인 방법이 있습니까?
답변1
사용 grep -o
:
grep "s_icsmstatus" $CONTEXT_FILE | grep -o 'disabled'
-o
o
일치하는 전체 줄이 아닌 제공된 패턴과 정확히 일치하는 항목만 출력으로 제공합니다 .
답변2
grep
html 태그를 구문 분석하는 데 가장 적합한 도구는 아니지만 P
erl 구문의 약간의 도움을 받아 다음을 수행할 수 있습니다.
$ grep -Po 's_icsmstatus">\K[^<]*' $CONTEXT_FILE
disabled
가장 중요한 부분은 \K
지금까지 일치한 모든 것을 제거하고 남은 것, 즉 다음 항목까지의 모든 것을 인쇄하는 것입니다 <
.
답변3
다음을 사용할 수 있습니다. 이는 "disabled"라는 단어뿐만 아니라 XML 태그 사이의 모든 단어를 가져오는 점에서 더 일반적입니다.
grep "s_icsmstatus" test.txt | grep "s_icsmstatus" test.txt |" '{print $2}' |
인용하다: http://code.scottshipp.com/2013/06/27/easily-extract-data-from-xml-using-grep-and-awk/