タグ間でのみ Grep

タグ間でのみ Grep

次のタグを含むhtmlタイプのファイルがあります。

<Currentnumber>0.3.5</Currentnumber>

変数の値をキャプチャする方法0.3.5ただこれ?

私はこの行を次のようにgrep'dしました:

grep -E "<Currentnumber>.*</Currentnumber>$" myfile

grep教育目的で回答に使用されたパラメータの説明も提供されている場合はありがとうございます。

行はいくつかの空白(またはタブ)で始まるため、次は機能しません。

grep -E "^<Currentnumber>.*</Currentnumber>$" myfile

答え1

HTMLを解析するために正規表現を使用しないでください!これはstackexchangeのウェブサイトで最も一般的なエラーです。

XML/HTML パーサーを使用する方が良いです。またはサクソンリント私自身のプロジェクト

例:

xmllint --xpath '//Currentnumber/text()' file.html
xmlstarlet sel -t -v '//Currentnumber/text()' file.html
saxon-lint --xpath --html '//Currentnumber/text()' file.html

確認する:HTMLタグで正規表現を使用する

答え2

sed と正規表現の使用

sed -e 's/<Currentnumber>\(.*\)<\/Currentnumber>/\1/' file.html

答え3

これが次の人に役立つことを願っています:

$ echo '<Currentnumber>0.3.5</Currentnumber>' | cut -d '>' -f 2 | cut -d '<' -f1
0.3.5

この回答について:

  • あなたの文字列/干し草の山は「知られている」です。そうですか?したがって、このようなヒントは公正なゲームです。
  • 欠陥を指摘します。誰かがマークアップを変更した場合は、このソリューションを更新する必要があります。美しい。 (まだパフォーマンスが悪く、正規表現を維持するのが難しいことに頼る理由はありません。「this」ではありません。)
  • (常にビルド番号を取得できるようにテストまたは完全性チェックを実行して、これらの変更をすばやく確認できます。)
  • 特別なツールは必要ありません。最小限のエンクロージャだけがあってもcutそこにあります。 (「コンテナ内にリンターを取り付けるにはDevOpsが必要です」という答えは完全に不可能です)

関連情報