
以下の出力で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/