Предполагая, что инструменты GNU
(которые вы, кажется, используете):
grep -r --include='*.tex' -lZ '{fig/.*}' . |
xargs -r0 sed -i.back 's:\({fig/[^}]*\)}:\1.png}:g'
grep
, чтобы найти список файлов для обновления, sed
, чтобы выполнить обновление только для эти файлы.
Или, если вы хотите добавить только .png
, если его еще нет, GNU grep
имеет параметр -P
для регулярного выражения PCRE с его (? оператор отрицательного просмотра назад, но еще не GNU
sed
(хотя ssed
в том же семействе есть), поэтому переключение на perl
здесь:
grep -Pr --include='*.tex' -lZ '\{fig/[^}]*(?<!\.png)\}' . |
xargs -r0 perl -pi.back -e 's:(\{fig/[^}]*(?<!\.png))\}:$1.png}:g'
С -i.back
исходный файл сохраняется с расширением .back
.