7

私は知っています、curl、grep、sedを使用して解析しないでください。しかし、私は簡単なアプローチを探していますが、非常に安全なアプローチではありません。

そのため、curlを含むHTMLファイルを取得します。このファイルから、タグから特定の属性の値が必要になります。私はgrepを使用して、それが言う行を取得しますtoken。これは1回だけ発生します。これは私に全体のdivを与えます:

<div class="userlinks">
  <span class="arrow flleft profilesettings">settings</span>
  <form class="logoutform" method="post" action="/logout">
    <input class="logoutbtn arrow flright" type="submit" value="Log out">
    <input type="hidden" name="ltoken" value="a5fc8828a42277538f1352cf9ea27a71">
  </form>
</div>

値属性(「a5fc8828a42277538f1352cf9ea27a71」など)だけを取得するにはどうすればよいですか?

4

5 に答える 5

13

grep する必要はありません:

sed -n '/token/s/.*name="ltoken"\s\+value="\([^"]\+\).*/\1/p' input_file
于 2012-07-17T13:51:56.077 に答える
10

片道、使用sed:

sed "s/.* value=\"\(.*\)\".*/\1/" file.txt

結果:

a5fc8828a42277538f1352cf9ea27a71

HTH

于 2012-07-17T13:48:31.993 に答える
4

XPath 式と Grep のダッシュを使用する

実際には、コマンド ラインから HTML を適切に解析できます。たとえば、xgrepを使用して xpath 式を作成し、GNU sed (または選択した grep) を使用して、関心のあるテキストだけを抽出できます。例えば:

$ xgrep -x '//input[@name="ltoken"][1]/@value' /tmp/foo |
      sed -rn '/value/ s/.*"([[:xdigit:]]+)"/\1/p'
a5fc8828a42277538f1352cf9ea27a71
于 2012-07-17T15:15:52.830 に答える
4

使用する別の方法awk

grep "ltoken" file.txt | awk -F"\"" '{print $6}'

異なる属性値については、値を増減するだけです$6

于 2015-01-22T02:41:57.177 に答える
2

xgrep ソリューションには、有効な xml が必要であるという問題が 1 つあります。'input' 要素が閉じられていないため、提供された html は有効ではありません。 xmllintには html パーサー オプションがあり、sed を使用せずに値を抽出するための string() 関数も提供します。

$ xmllint --html --xpath 'string(//input[@name="ltoken"][1]/@value)' foo
a5fc8828a42277538f1352cf9ea27a71
于 2014-01-28T12:13:14.640 に答える