grep은 출력에서 ​​특정 문자열을 찾습니다.

grep은 출력에서 ​​특정 문자열을 찾습니다.

아래 출력에서 ​​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' 

-oo일치하는 전체 줄이 아닌 제공된 패턴과 정확히 일치하는 항목만 출력으로 제공합니다 .

답변2

grephtml 태그를 구문 분석하는 데 가장 적합한 도구는 아니지만 Perl 구문의 약간의 도움을 받아 다음을 수행할 수 있습니다.

$ 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/

관련 정보