Замена пользовательских строк в файлах под Linux - PullRequest
2 голосов
/ 15 марта 2012

Я специально разместил этот вопрос здесь, хотя - для моего случая - это связано с LaTex. Сама проблема, однако, общая.

У меня есть несколько *.tex исходных файлов, содержащих ссылки на изображения, например, image1.jpg и image2.png. Я хочу найти во всех исходных файлах указанный набор расширений (в данном случае jpg и png ) и заменить их их аналогами pdf. Следовательно, я хочу закончить ссылками image1.pdf и image2.pdf. Чтобы усложнить проблему, у меня есть список из 20 файлов (image3.jpg, image 4.png и т. Д.), Которые я не хочу менять.

Есть ли простое решение (на основе sed или какие-либо инструменты?), Которое может помочь? Хотя я не гуру регулярных выражений. ;)

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

Более простой способ:

  • image3.jpg, image4.png -> image3.JPG, image4.PNG
  • *.jpg, *.png -> *.pdf
  • image3.JPG, image4.PNG -> image3.jpg, image4.png
1 голос
/ 15 марта 2012

Замените имена файлов в вашем черном списке на некоторые "волшебные" строки, чтобы они не выглядели как имена файлов и не соответствовали ничему.

cat your.tex | \
sed 's/image3.jpg/MMMAAAGGGIIICCC1/g' | \
sed 's/image4.png/MMMAAAGGGIIICCC2/g' | \
# ... all others on your blacklist
# then do regexp replacements
sed 's/\(image[0-9]\+\)\.\(png\|jpg\)/\1.pdf/g' | \
# ... convert all "magics" back
sed 's/MMMAAAGGGIIICCC1/image3.jpg/g' | \
sed 's/MMMAAAGGGIIICCC2/image4.png/g' | \
# ... and many others
# then output
cat > output.tex
1 голос
/ 15 марта 2012

Я бы предложил использовать find для получения списка файлов, отфильтровать его с помощью grep -v, чтобы удалить файлы, которые вы не хотите изменять, и затем использовать xargs для запуска этих файлов sed -r -i 's/image([12])\.(jpg|png)/image\1.pdf/g'. Будьте внимательны, sed -i выполняет замену на месте, поэтому лучше сделать резервную копию ваших файлов на случай, если что-то пойдет не так. Вы также можете использовать sed -ibak, чтобы позволить sed сделать резервную копию с расширением bak до того, как он изменит файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...