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/

関連情報