2

HTML ページ ソースをファイルとしてダウンロードし、ファイルを読み取り、特定のコードの後に​​ある特定の URL を抽出するスクリプトを作成しています。(出現回数は 1 回のみ)

一致する必要があるサンプルは次のとおりです。

<img id="sample-image" class="photo" src="http://xxxx.com/some/ic/pic_1asda963_16x9.jpg"

URL の前のコードは常に同じなので、次の部分を抽出する必要があります。

<img id="sample-image" class="photo" src="

および"URL の後に。

私はこのようなsedで何かを試しました:

sed -n '\<img\ id=\"sample-image\"\ class=\"photo\"\ src=\",\"/p' test.txt

しかし、うまくいきません。私はあなたの提案に感謝します、どうもありがとう!

4

4 に答える 4

3

grep がある場合はGNU、次のようなことができます。

grep -oP "(?<=src=\")[^\"]+(?=\")" test.txt

使用したい場合awkは、次のようにします。

awk -F\" '{print $(NF-1)}' test.txt
于 2013-06-15T22:17:12.223 に答える
3

次のようにを使用できます。

grep -oP '<img\s+id="sample-image"\s+class="photo"\s+src="\K[^"]+' test.txt

またはを使用:

sed -r 's/<img\s+id="sample-image"\s+class="photo"\s+src="([^"]+)"/\1/' test.txt

またはを使用:

awk -F'src="' -F'"' '/<img\s+id="sample-image"/{print $6}' test.txt
于 2013-06-15T21:43:00.897 に答える
2

With sed as

echo $string | sed 's/\<img.*src="\(.*\)".*/\1/'
于 2013-06-15T21:55:00.133 に答える
1

sed使用しているコマンドに関するいくつかのこと:

sed -n '\<img\ id=\"sample-image\"\ class=\"photo\"\ src=\",\"/p' test.txt
  • <"またはスペースをエスケープする必要はありません。一重引用符は、シェルが式に対して単語分割やその他の処理を実行するのを防ぎますsed

  • あなたは本質的にこれを行っていますsed -n '/pattern/p' test.txt(開始のバックスラッシュが欠けているように見えることを除いて)「このパターンに一致し、一致を含む行を出力します」と言いますが、実際にはURLを抽出していません。

  • class="photo"これは些細なことですが、すでに HTML 要素が一意になっているため、一致させる必要はありませんid(同じ HTML 内で 2 つの要素が同じ ID を共有することはありません)。

これが私がすることです

sed -n 's/.*<img id="sample-image".*src="\([^"]+\)".*/\1/p' test.txt
  • pフラグは、sed置換 ( s) が実行された行を出力するように指示します。

  • \(pattern\)の右側にある 、 などを\1介してアクセスできる部分式をキャプチャします\2s///

  • 正規表現の.*先頭にあるのは、行の要素の前に何か他のものがある場合です<img>(HTMLファイルを解析していると述べました)

于 2013-06-15T22:08:37.120 に答える