特にgrepとsed

特にgrepとsed

*.texファイルのすべての行を次の情報に置き換える方法を見つけようとしています。たとえば、次のようになります。

text{fig/titel/Logo}text

到着

text{fig/titel/Logo.png}text

私は試した:

egrep --include=*.tex -r ".*{fig/.*" *

変更したい行を提供します。しかし、例えば、sedコマンドをどのようにさらに使用できますか?

私はfindとsedを使ってみましたが、grepとsedを使ったことはありません。誰でも助けることができますか?

ベストアンサー1

GNU(使用中のように見える)仮想ツール:

grep -r --include='*.tex' -lZ '{fig/.*}' . |
  xargs -r0 sed -i.back 's:\({fig/[^}]*\)}:\1.png}:g'

grep更新するファイルのリストを見つけて、そのファイルのみをsed更新してください。

.pngまたは、存在しないケースを追加する場合は、GNUには非正規の後方検索演算子を含むPCRE正規表現オプションがgrepありますが、GNUには(同じ系列に属するにもかかわらず)まだ1つはありません。次に切り替えます。-P(?<!...)sedssedperl

grep -Pr --include='*.tex' -lZ '\{fig/[^}]*(?<!\.png)\}' . |
  xargs -r0 perl -pi.back -e 's:(\{fig/[^}]*(?<!\.png))\}:$1.png}:g'

使用すると、元の-i.backファイルは拡張子として保存されます.back

おすすめ記事