В определенных случаях мы хотим заменить текст в файле, например, изменить в Document.txt все, что «моя семья» говорит «нам». Для этого мы можем использовать наш предпочтительный текстовый редактор (Kate, Gedit, SublimeText и т. Д.), Но всегда полезно знать варианты, другие способы достижения того же результата 🙂
Бывает, что с регулярные выражения это может быть достигнуто, команда sed просто великолепна, у нее бесконечное количество вариантов и опций, но ... для тех, кто просто хочет заменить текст из наименее сложный способ, для них это то, что я привожу этот гораздо более простой вариант:
Следуя примеру, у нас есть файл Document.txt находится в $ HOME / Document.txt со следующим текстом:
(...) моя семья Это как все они, как твоя или соседка. по факту моя семья Мы стараемся быть ответственными людьми и в глазах общества политически и социально корректными. Однако в моем доме есть паршивая овца, и это моя роль LOL !. Я всегда был тем, кто не боится говорить то, что он думает (даже если это явно не верно в глазах общества), хотя на самом деле моя семья устала от
грязьсегодняшнее общество.
С помощью следующей команды вы измените «моя семья" по "нам«:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Это так просто 🙂
Итак, текст будет:
(...) нам Это как все они, как твоя или соседка. по факту нам Мы стараемся быть ответственными людьми и в глазах общества политически и социально корректными. Однако в моем доме есть паршивая овца, и это моя роль LOL !. Я всегда был тем, кто не боится говорить то, что он думает (даже если это явно не верно в глазах общества), хотя на самом деле моя семья устала от
грязьсегодняшнее общество.
Синтаксис:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Команда может показаться немного сложной, давайте разберем ее немного и объясним немного проще 😉
- Perl : Что мы будем использовать, perl
- -число Пи : Пи, как π (примерное значение 3.14)
- -e : E представьте себе это для «e to execute» ^ - ^
- Тогда в кавычках » мы открываем с s и мы заканчиваем g: "sg" … Представьте, что буква S означает начало, а буква G - окончание игры 😀
- Поверните между sg мы должны поставить два набора скобок: [] y [], будучи таким: "S [] [] g"
- В первых скобках, как я сказал выше, будет текст, который мы хотим удалить и заменить новым, а во втором наборе скобок будет помещен новый текст, как показано в примере: "С [моя семья] [мы] г"
Просто не правда ли?
Объяснение на самом деле гораздо более обширное, чем то, что необходимо для команды, его довольно просто понять 🙂
Perl - это гораздо больше, чем просто способ замены текста, это целый язык 😉
Если вы хотите узнать о нем больше, установите пакет Perl-документ и посмотрите, что он позволяет, это просто другая вселенная.
Между прочим, и в заключение, предполагая, что вы хотите найти все файлы .txt, которые есть в $ HOME / Documents /, и в каждом из них заменить «моя семья» на «нас», вы можете присоединиться к find + perl, чтобы добиться этого:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Или используя подстановочный знак:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Проблема со вторым вариантом в том, что он не заменяет файлы, находящиеся во вложенных папках 🙂
В любом случае, я надеюсь, вам было интересно. Для меня это было действительно полезно, я уже могу заменять текст прямо из терминала ... отлично! 😀
Что ж, я думаю, что многие из нас здесь знают команду sed, которая служит той же цели, она делает ее намного лучше и проще в использовании ...
Спасибо за ваш комментарий,
Всего две детали, почему вы говорите, что sed делает его лучше? Неужели проще использовать такое количество «странных» персонажей?
Привет всем!!!. Я использовал команду СЕПГ, а описанный здесь метод с Perl проще. Спасибо КЗКГ ^ Гаара !!!.
Спасибо за комментарий 🙂
Ну, по крайней мере, мне кажется, что это проще, чем регулярные выражения ... что с таким количеством «странных» символов что-то действительно сложное для понимания и изучения может быть сделано неискушенным.
Есть «старая» пословица: «У меня была проблема, я решил использовать регулярные выражения ... теперь у меня ДВЕ проблемы» 😉
ХАХАХАХАХАХА !!!
Регулярные выражения могут спасти нам жизнь в определенный момент ... да, нужно много времени, чтобы научиться их использовать и не умереть, пытаясь.
Если бы я знал эту команду много лет назад, БОГ !! насколько простой была бы моя жизнь 😀
Очистить! При правильном обращении они очень мощные Нет ничего лучше для манипулирования текстом. Но иногда, как вы говорите в этом случае с Perl, вам не нужно заходить так далеко, если достаточно замены.
Я бы все равно использовал Python :)
Но в жажде я вижу еще проще ... Я что-то не так делаю?
sed -i "if / what-I-want-to-change / new-to-put /" file-in-which-to-replace
хе-хе ... и если я хочу заменить "http://my.blog.com/content/" на "http://my.blog.com/uploads/files/" 😀 ... у вас уже есть поставить \ с пробелами и прочее, а усложняется или нет?
Использование / в качестве разделителя не обязательно. Посмотрите с +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» файл
О_О… Боже!
Ты открыл мне сейчас целую вселенную возможностей .. О_О
Мне нравятся эти посты, где мы все чему-то учимся 🙂
Я этого тоже не знал.
Я предпочитаю использовать непосредственно vi ..
Так просто как:
:% s / нас / моя семья / г
% -> весь документ
s -> поиск
g -> все вхождения
Приветствую ..
Спасибо!
Я не знал, как это сделать с vi
Добавлено в избранное!
Спасибо!
Взгляните на него, если у вас есть немного команды rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Отличная запись! Если кому-то интересно, то же самое с командой Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
А что будет, если в файле то, что я хочу заменить, содержит кавычки?
Пример замены текста: »1 ″ на текст:» 2 ″
как будет команда?
Привет
Я хотел заменить строку с символом @ посередине и изменил текст только на текст перед at.
текст изменить: Да здравствует Перу
новый текст: Viva mi patria @percysalgado
Показано: Да здравствует моя родина
Спасибо за вашу помощь
"\" Вы должны использовать косую черту перед символами с двойным использованием @, #, чтобы они интерпретировались как текст.
А как в windows сделать ????