私は次のような多くの散乱ファイルパスを持つ大きなファイルを持っています
lolsed_bulsh.png
これらのファイル名の前に次のような拡張パスを追加します。
/full/path/lolsed_bullsh.png
これらのマッチングとキャプチャに苦労しています。現在、私は次のバリエーションを試しています:
cat myfile.txt| sed s/\(.+\)\.png/\/full\/path\/\1/g | ack /full/path
Sedにはいくつかの正規表現があるか、理解していないグループの動作をキャプチャしていると思います
sed
はPOSIX BREを使用し、 BREは1つ以上の量指定子をサポートしません+
。量指定子+
は POSIX EREでサポート のみです。ただし、 POSIX sedはBREを使用し、EREに切り替えるオプションはありません 。
使用する ..*
シミュレートする.+
移植性を維持したい場合。
または、コードが常にGNU sedで実行されると想定できる場合は、GNU extension .\+
。または、GNU extension -r
フラグをPOSIX EREに切り替えます。 -E
フラグ higuaro's answer は BSD sedとの互換性のための文書化されていないフラグ で、同じ効果があります。
正規表現の変更+
with *
:
sed -E "s/(.*)\.png/\/full\/path\/\1/g" <<< "lolsed_bulsh.png"
以下を印刷します。
/full/path/lolsed_bulsh
注: Thenon standard-E
オプションは、エスケープを回避することです(
および)