次のようなHTMLファイルがあります。
<td class='job-title'>
<h3>
<a href="/postings/46670">Line Cook</a>
</h3>
</td>
Line Cook
上記のHTMLからの値を取得しようとしています。grepと正規表現を使用してこれを行うにはどうすればよいですか?
この短いgrep行は次のように機能します。
grep -oP "(?<=>)[^<]*" file
ただし、HTMLコードはその形式である必要があります(たとえば>Line Cook<
)。1行である必要があります。そうでない場合、grepは失敗します。HTMLが大きい場合は、パーサーを使用することをお勧めします。
これは、ファイルの残りの部分がどのように見えるかに応じて、必要な場合とそうでない場合があります。
$ gawk -F'[<>]' -v RS='</td>\n' '{print $(NF-4)}' file
Line Cook
私も同じような挑戦をしました。Jenkinsのシェルスクリプトを使用して、HTML応答の最後のテーブルセルの内容をキャプチャする必要がありました。
<BODY bgcolor=#dddddd>
<TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>aliasName</B></TD>
<TD>jms_aliasName</TD>
</TR>
<TR>
<TD valign="top"><B>messageCount</B></TD>
<TD>0</TD>
</TR>
</TABLE>
</BODY>
curlを使用してサービスを呼び出し、このページを作成します。次のページにパイプして変数を入力しました。
response=`/usr/bin/curl -s http://$host:$port/invoke/CustomService?aliasName=jms_aliasName | sed -n '/<TD>/,/<\/TD>/H; /<TD>/h; /\/TD/{x;s/<TD>\(.*[^\n]\)\n*<\/TD>/\1/p;}' | tail -n 1`
魔法であるsedコマンドを他の人に感謝します。
| sed -n '/<TD>/,/<\/TD>/H; /<TD>/h; /\/TD/{x;s/<TD>\(.*[^\n]\)\n*<\/TD>/\1/p;}' | tail -n 1