2012-03-15 4 views
2

Я разместил здесь этот вопрос специально, хотя - для моего случая - это связанный с laTex. Однако сама проблема является общей.Замените пользовательские строки в файлах под Linux

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

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

+0

Итак, вы хотите заменить * ссылки * в файлах '* .tex'? –

ответ

1

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

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

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

2

проще способ:

  • image3.jpg, image4.png ->image3.JPG, image4.PNG
  • *.jpg, *.png ->*.pdf
  • image3.JPG, image4.PNG ->image3.jpg, image4.png
Смежные вопросы