
ファイルがあります。例:
<hello>TestFile</hello>
<test>2018-04-30</test>
<greetings>mycomputer</greetings>
**<Iwanthis>6.1.0</Iwanthis>**
<example>20180411</example>
blah blah
6.1.0(この場合は6.1.0)の間の値を探しています。
XXXXの値を取得するためにファイルをgrepする方法はありますか?
答え1
もちろん、XMLファイルのように見えます。ルートコメントを追加し、XMLパーサーを使用します。
$ { echo '<r>'; cat file; echo '</r>'; } | xmlstarlet sel -t -v //Iwanthis
6.1.0
答え2
行に開始タグと終了タグがあると信頼できる場合は、次のフィールドの区切り文字として使用できますawk
。
awk -F "</*Iwanthis>" '(NF > 1){print $2}' yourfile
これは多くの人為的な状況で失敗します。より厳密に使用するには、次のものを使用できますsed
。
sed -n 's_.*<Iwanthis>\(.*\)</Iwanthis>.*_\1_p' yourfile
-n
一致する行からのみ出力を取得できるように、デフォルトの出力を抑制します。s
スラッシュを出ないように、コマンドの区切り記号としてアンダースコアを選択しました。このs
コマンドは、行全体を開くタグと閉じるタグの間の部分(対応する\1
部分を参照\(.*\)
)に置き換えます。もちろん、これが失敗する奇妙な状況を作成することもできます。