0

次のようなURLの画像を取得しました。

<img alt="" src="http://www.example-site.com/folder_with_underscore/folder-with-dash/3635/0/235/NumBerS_and_Uc/image.png" />

使っていますsed "s///g"

だから私が試しているのはsrc値を置き換えることですが、これはほとんどの場合完全に異なります。

使用する方法はありますかsed "s/src=\" (until first " ) / new url /g"

追加情報:

PATH=C:\cygwin\binWindowsと.batファイルでCygwinを使用しています

4

2 に答える 2

5

[^"]を除くすべての文字に一致する"ため、次を使用できます。

 sed 's/src="[^"]*"/src="NEWURL"/g'

例:

[me@home]$ echo '<img alt="" src="http://www.example-site.com/folder_with_underscore/folder-with-dash/3635/0/235/NumBerS_and_Uc/image.png" />' | sed 's/src="[^"]*"/src="http:\/\/stackoverflow.com"/g'
<img alt="" src="http://stackoverflow.com" />

それは最初の出現"がおそらくあなたが望むものになるまで一致することに注意してください。の最後の発生まで本当に一致させたい場合は"、次のようにすることができます。

 sed 's/src=".*"/src="NEWURL"/g'

正規表現は貪欲であるため、可能な限り多くの文字を使用するため、最後に発生するまで一致し"ます。これは上記の例でも機能しますが、入力内に。を含む他のコンテンツがある場合、期待どおりに動作しません"

于 2012-09-25T10:43:18.073 に答える
1

Shawnの解決策はほとんど正しいですが、srcurlに改行が含まれている場合は扱いません。 sedこのようなケースの処理はあまり得意ではありませんが、解決策をハックすることはできます。

sed '/src/{
/src="[^"]*"/{ s//src="NEWURL"/; n; }
s/src=".*$/src="NEWURL"/
p
:a
s/.*//;
N
/"/!ba
s/[^"]*"//
}
' input

上記の改行の多くは、sedの一部のバージョンでは不要ですが、他のバージョンでは必要であることに注意してください。(特に、:aブランチコマンドの後と後の改行。sedの一部のバージョンは改行でのみラベルを終了します。ラベルをセミコロンで終了できるバージョンのsedは、厳密に準拠しているわけではないと思います。標準ですが、これは一般的な方法です。)このスクリプトは、必要に応じて単純な置換を行いますが、の後に引用符が見つからない場合はsrc="、終了が表示されるまで行を削除するループに入ります"。これは醜い解決策であり、xmlの解析にsedを使用しないことをお勧めします。

于 2012-09-25T11:40:31.920 に答える