Выполните операцию регулярного выражения над файлами в каталоге - PullRequest
0 голосов
/ 14 марта 2011

Я хочу заменить экземпляры <span class='i'> </span> на <i> </i>, потому что я решил вместо этого отформатировать свои страницы.Итак, я придумал эту команду:

perl -pe "s/<span +class *= *['\"]i['\"] *>(.*?)<\/span>/<i>\1<\/i>/g"

Я мог бы сделать ее более сложной, но я действительно не думаю, что есть случаи странно сформированных тегов, таких как < / span> или что-то еще, поэтому я оставлю этона это.У него действительно не жадный захват, поэтому я использовал perl -p вместо sed.

Таким образом, это выведет правильно измененные строки, но я не уверен в том, как лучше отправить несколько файлов с помощью этой команды.Какой лучший способ сделать это, если я хочу, чтобы все pages/*.html исправили теги span class='i'?Предоставляет ли bash какое-либо условие для выполнения этого, кроме цикла for?

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

@ Стивен, согласно вашему комментарию к ответу @SiegeX, будет нормально работать следующее:

perl -pi -e "s/<span +class *= *['\"]i['\"] *>(.*?)<\/span>/<i>\1<\/i>/g" *.html

Я бы хотел, чтобы Perl создавал резервные копии файлов, поэтому измените первую часть на

perl -pi.bak -e ...
2 голосов
/ 14 марта 2011

Следующее будет выполнять итерацию по всем html-файлам в pages/ и выполнять редактирование на месте с помощью сценария perl.

#!/bin/bash

for file in pages/*.html; do
  perl -pi -e "s/<span +class *= *['\"]i['\"] *>(.*?)<\/span>/<i>\1<\/i>/g" "$file"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...