2

次のように、HTML ファイル内のすべての画像の前に絶対パスを挿入しようとしています。

<img src="/media/some_path/some_image.png"> to <img src="{ABS_PATH}/some_path/some_image.png">

行を識別するために次の正規表現を試しました:

egrep '(src|href)="/media([^"]*)"'

これらの変更を行うために sed を使用したいのですが、上記の正規表現が機能しません。ヒントはありますか?

 sed 's#(src|href)="/media([^"]*)"##g'

sed: -e 式 #1、文字 32: `s' への不明なオプション

編集:わかりました、今私は持っています:

echo 'src="/media/some_image.png"' | "egrep -o '(src|href)="/media([^"]*)"' | sed 's/(src|href)=\"\/media([^"]*)\"//g'

Sed は文字列と一致するはずですが、一致しません

4

2 に答える 2

2
  1. sed は ERE (拡張正規表現) を理解せず、BRE (基本正規表現) のみを理解します。GNU sed には、ERE をオンにする "-r" オプションがあります。

  2. 次のように、正規表現にスラッシュがあるため、正規表現の区切り記号を変更する必要があります。

    sed -r 's#(src|href)="/media([^"]*)"##g'
    

区切り記号には、ほぼすべての句読点を使用できます。

于 2012-04-17T06:12:53.243 に答える
1

/パターンの区切り文字として使用する場合は、sed でエスケープする必要があります。

そう:

sed 's/(src|href)="/media([^"]*)"//g'

になります:

sed 's/(src|href)="\/media([^"]*)"//g'

おそらく紛らわしいのは、egrep (拡張正規表現を使用する) と sed のルールが異なることと、バニラ grep (基本的な正規表現を使用する) では、何をエスケープする必要があるかということです。

于 2012-04-17T06:12:07.183 に答える