結果セットから属性名を削除しますか?

結果セットから属性名を削除しますか?

(過度に単純化された)次のHTML文書があります。

<html>
  <body>
    <a href="...">...</a>
    <a href="...">...</a>
    <a href="...">...</a>
    ...
  </body>
</html>

私が望むのは、行で区切られた出力からURLを抽出することです。 xmllintと入力してください。

$ xmllint --html --xpath //a/@href
href="..." href="..." href="..."

属性、名前を含む属性全体を取得し、スペースで区切って出力します。属性値を含む行のリストを取得するにはhref?私は次の出力が欲しい:

...
...
...

各要素の属性...のURLはどこにありますか?hrefa

この出力形式を正しく指定するにはどうすればよいですか?

ベストアンサー1

一方file.html:

<html>
  <body>
    <a href="url1">link text 1</a>
    <a href="url2">link text 2</a>
    <a href="url3">link text 3</a>
    ...
  </body>
</html>

Unixパイプを使用して既存のxmllint出力を送信し、sed次の結果を表示できます。

$ xmllint --html --xpath //a/@href input.html | sed 's/ href="\([^"]*\)"/\1\n/g'
url1
url2
url3

説明する

単独で使用すると、xmllint次のような結果のみが得られます。

$ xmllint --html --xpath //a/@href input.html
 href="url1" href="url2" href="url3"%
  • 末尾は%末尾の改行文字がないことを意味します。

Unixシリーズシステムの利点の1つは、次のような利点を得ることができることです。ダグ・マキロイのパイプ機能があるため、1つのプログラムですべての作業を行う必要はありません。実際に必要に応じてプログラムを組み合わせることをお勧めします。

したがって、見つかった出力は満足のいくものではなく、パイプを介してxmllintコマンドとsed結合します。

  • 検索href="URL"単位
  • \( \)グループでURL部分を囲みます。
  • \1\nURL の周りで定義したグループを参照するように置き換え、一致の後に新しい行を追加します。\1

このように合計を結合して、目的の行に分割された出力(1行に1つのURL)を取得しますxmllintsed

おすすめ記事