Найти & Замена текста в нескольких документах из командной строки
Если вы знакомы с командной строкой и когда-либо оказывались в ситуации, когда вам нужно найти и заменить слово, фразу, URL-адрес или символ в группе из нескольких текстовых документов, perl отлично справляется с этой задачей. Простая командная строка очень быстро выполнит групповой пакетный поиск и замену текста, будь то в одном документе или в группе из нескольких документов.
Как и во многих случаях в командной строке, здесь нет процесса подтверждения, поэтому перед запуском команды убедитесь, что ваш синтаксис настроен правильно, иначе вам может понадобиться выполнить еще один поиск и замену исправить опечатку.
Основной синтаксис команды следующий: perl -pi -w -e 's/THIS/THAT/g;' /путь/к/файлам.txt
Для примера из одного слова, если вам нужно заменить все экземпляры «огр» на «кукурузный хлеб» в каждом файле .txt в папке «Документы», вы должны использовать следующую команду:
perl -pi -w -e 's/ogre/cornbread/g;' ~/Документы/.txt
Для примера поиска и замены целой фразы предположим, что мы собираемся заменить все предложение «Шоколадная фабрика» ” с «Волшебником страны Оз» в группе файлов .txt, начинающихся с «Фильмы», хранящихся в каталоге «Документы»:
perl -pi -w -e 's/Шоколадная фабрика/Волшебник страны Оз/g;' ~/Документы/Фильмы.txt
Поиск и замена выполняются немедленно. Вы можете перепроверить изменение, используя команду cat и grep для проверки:
cat ~/Documents/Films124.txt |grep Волшебник страны Оз"
По общему признанию, это довольно сложно, и да, пакетный поиск и замена в нескольких документах может быть выполнен более удобным для пользователя способом с помощью приложений с графическим интерфейсом, таких как TextWrangler и BBEdit, но иногда командная строка просто быстрее для таких быстрых задач, как эта, и других подобных, а также не требует дополнительных загрузок для использования.
Большое спасибо Лайфхакеру за отличный трюк.
Update: Команда «sed» — это еще один способ быстрого поиска и замены через командную строку. Покрытие sed в основном является темой для другой статьи, но основной синтаксис использования sed для этой задачи немного проще и, следовательно, его легче запомнить:
sed -i 's/THIS/THAT/g' /path/to/files.txt
Нет правильного или неправильного пути, поэтому использование perl или sed становится вопросом личных предпочтений.