xpathを使用せずにノード数を計算して属性値を取得する方法

xpathを使用せずにノード数を計算して属性値を取得する方法

現在、次のシェルスクリプトがあります。

LOGIN=`curl 'https://www.ponta.jp/u/LWAS900/SLWAS900010.htm' -sS | grep '<input type="hidden" name\|<form\|</form'`

for i in $(seq $(printf "$LOGIN" | xmllint --xpath "count(/form/input)" -))
do
    printf " -d "
    printf "$LOGIN" | xmllint --xpath "string(/form/input[$i]/@name)" -
    printf "="
    printf "$LOGIN" | xmllint --xpath "string(/form/input[$i]/@value)" -
done

xpathがないUnix環境でも同じことをしたいと思います。誰でもこれを行う方法を教えてもらえますか?

ベストアンサー1

XMLパーサーベースのソリューションが最善の選択です。しかし、以下は速い正規表現のトリックです。

LOGIN=...
printf "$LOGIN" | 
    perl -nE 'say "-d $1=$2" if /name="(.*?)".*?value="(.*)"/'

おすすめ記事