web-dev-qa-db-ja.com

sedを使用して正規表現キャプチャグループを置き換える方法は?

私は次のような多くの散乱ファイルパスを持つ大きなファイルを持っています

lolsed_bulsh.png

これらのファイル名の前に次のような拡張パスを追加します。

/full/path/lolsed_bullsh.png

これらのマッチングとキャプチャに苦労しています。現在、私は次のバリエーションを試しています:

cat myfile.txt| sed s/\(.+\)\.png/\/full\/path\/\1/g | ack /full/path

Sedにはいくつかの正規表現があるか、理解していないグループの動作をキャプチャしていると思います

13
kevzettler

sedはPOSIX BREを使用し、 BREは1つ以上の量指定子をサポートしません+ 。量指定子+POSIX EREでサポート のみです。ただし、 POSIX sedはBREを使用し、EREに切り替えるオプションはありません

使用する ..*シミュレートする.+移植性を維持したい場合。

または、コードが常にGNU sedで実行されると想定できる場合は、GNU extension .\+。または、GNU extension -rフラグをPOSIX EREに切り替えます。 -Eフラグ higuaro's answerBSD sedとの互換性のための文書化されていないフラグ で、同じ効果があります。

7
nhahtdh

正規表現の変更+ with *

sed -E "s/(.*)\.png/\/full\/path\/\1/g" <<< "lolsed_bulsh.png"

以下を印刷します。

/full/path/lolsed_bulsh

注: Thenon standard-Eオプションは、エスケープを回避することです(および)

22
higuaro