特定の文字列の後に特定の文字列を抽出するHTMLファイルmomcpy.html
があります。ファイルの内容は次のとおりです。
<tr><br>
<th height="12" bgcolor="#808080"><label for="<br>
LSCRM:Abhijeet<br>
<br>
MCRM:Bhargav<br>
<br>
TLGAPI:GAURAVAURAV<br>
<br>
MOM:MANIKA"></td><br>
これは、HTMLの行の1つに存在します。
Manika
を抽出して変数に保存したい。したがって、基本的にはMOM:の後に存在する文字列をすべて抽出したいのですが、それは動的である可能性があります。
私が試してみました:
file='/home/websphe/Tomcat/webapps/MOM/web/momcpy.html'
y=$( awk '$1=="MOM:"{print $2}' $file)
echo "$y"
しかし、それはうまくいきませんでした。
正規表現でhtmlを解析するとうまく終了しない可能性が高い ですが、文字列MANIKA
を取得できる可能性があるため、これを行うことを賢明にアドバイスすることはできません
sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file
とにかくサンプルで問題なく動作します...
-n
要求するまで何も出力しない-r
EREを使用/string/
string
で行を検索s/old/new/
old
をnew
に置き換えます.*
任意の数の任意の文字([^"]+)
"
以外の文字を保存します\1
保存された文字への後方参照p
変更した行のみを印刷しますgrep -Po 'MOM:\K[^"]+' file.html
警告:これは非常に堅牢なソリューションではありません。そして、あなたのHTMLは無効です
探している文字列は常にMOM:
の前にありますが、その後に常に"
があるかどうかはわかりません。この答えの目的のために、小文字または大文字のアルファベット文字、数字、またはアンダースコアを含むことが許可されている文字列を探していると仮定します。これらは 正規表現 の用語で Word文字 として知られています。このようなテキストの「単語」の一致は、正規表現のほとんどの方言にそうするのに役立つ機能があるほど十分に有用です。これが望んでいない場合は、それに応じてこのソリューションを変更するか、他の回答のテクニックを使用できます。
私はエコーします David Foerster's 、 Zanna's 、および JJoao's 正規表現でHTMLを解析することに関する賢明な警告と、これが堅牢ではないことについて。注意してください、そしてあなたが要求したことが本当にやりたいことかどうかを考慮してください。サンプルコードでは、入力ファイルへのパスを変数$file
に割り当てているため、これが行われたと想定します。コマンドの出力を$y
に割り当てたので、同じことをします。
grep
を使用これは JJoaoのメソッド に似ており、正規表現がニーズにより適している場合は、コマンド置換でもそのメソッドを使用できます。
y="$(grep -oPm1 'MOM:\K\w+' "$file")"
-oPm1
は、-o -P -m 1
を記述するためのよりコンパクトな方法です。
-o
は、行全体ではなく、一致のみを出力します。-P
は PCRE を使用します。これは \K
をサポートします これまでに一致したテキストをドロップし、返される一致テキストに含まれないようにします。-m 1
は、パターンを1回一致させた後に停止します。 この方法では、 改行 で区切られた複数の一致ではなく、最初の一致のみを変数に割り当てます。JJoaoの答え のコマンドに-m1
を追加することもできることに注意してください。これにより、anyを持つ最初の行の一致のみが使用されます。
一致する最初の行に複数の一致が含まれる場合、このgrep
メソッドはすべての一致を提供します。たとえば、その行がMOM:MANIKA MOM:JANE"></td><br>
の場合、$y
は値を保持します。
MANIKA
JANE
sed
を使用これは Zannaのメソッド に似ています。
y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"
コマンド置換として囲まれていることに加えて、違いは次のとおりです。
\w+
("
)までの文字の代わりに1つ以上のWord文字([^"]+
)に一致します.*
)を消費するため、MOM:
を行の先頭に表示する必要はありませんこれに使用した手法 には GNU sed
が必要ですが、それはUbuntuで提供される sed
実装です。
一致する最初の行に複数の一致が含まれる場合、このsed
メソッドは最後の行のみを提供します。 MOM:MANIKA MOM:JANE"></td><br>
から以下を取得します。
JANE