次のタグを含む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、xmlstarletまたはサクソンリント私自身のプロジェクト
例:
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が必要です」という答えは完全に不可能です)