2つのxmlタグをgrepし、単一のコマンドを使用して出力を印刷します。

2つのxmlタグをgrepし、単一のコマンドを使用して出力を印刷します。

次のXML構造があり、grepを使用して単一のコマンドからCUSTOMER_IDタグとSTORE_IDタグの最初の2文字を抽出しようとしています。以下を使用して、単一のラベルに対してこれを行うことができます。

grep -oP '(?<=< STORE_ID >).*(?=< /STORE_ID >)' filename.* | awk '{print substr($0,2,2)}'
<CUSTOMER_ID>12345678910</CUSTOMER_ID>
<FIRSTNAME>Shubham</FIRSTNAME>
<LASTNAME>Anand</LASTNAME>
<STORE_ID>mystore</STORE_ID>

複数のタグに対してこれを行う方法は?

出力は1行にする必要があります。たとえば、上記の場合、結果は12 myでなければなりません。

注:複数のファイルの出力が必要です。だから入れなければなりません。filename.*

答え1

提供された入力と出力の例に基づいて、単一ファイルsedの簡単な解決策は次のとおりですinfile

$ cat infile
<CUSTOMER_ID>12345678910</CUSTOMER_ID>
<FIRSTNAME>Shubham</FIRSTNAME>
<LASTNAME>Anand</LASTNAME>
<STORE_ID>mystore</STORE_ID>

$ sed -n -e 's/<CUSTOMER_ID>\(..\)\(.*\)<.*>/\1/p' -e 's/<STORE_ID>\(..\)\(.*\)<.*>/\1/p' infile | sed '$!N;s/\n/ /'
12 my
$

上記の内容を単純なシェルスクリプトループでラップすると、複数のファイルを簡単に処理できます。

関連情報