ファイル内の> STRING <の間の値を見つける必要があります。

ファイル内の> STRING <の間の値を見つける必要があります。

ファイルがあります。例:

    <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部分を参照\(.*\))に置き換えます。もちろん、これが失敗する奇妙な状況を作成することもできます。

関連情報