В определени случаи искаме да заменим текста във файл, например да променим 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 да изпълни» ^ - ^
- След това в кавички » отваряме с a s и затваряме с a g: "sg" ... Представете си S за старт и G за Game Over 😀
- Обърнете се между sg трябва да поставим два комплекта скоби: [] y [], бидейки такъв: "S [] [] g"
- Вътре в първите скоби, както казах по-горе, ще отиде текстът, който искаме да премахнем и заменим с нов, докато във втория набор от скоби ще отиде новият текст, който трябва да поставим, следвайки примера: „S [моето семейство] [ние] g“
Просто, нали?
Обяснението всъщност е много по-обширно от това, което е необходимо за командата, доста лесно е да се разбере 🙂
Perl е много, много повече от просто начин за заместване на текст, това е цял език 😉
Ако искате да научите повече за това, инсталирайте пакета perl-doc и погледнете whooodo какво позволява, това е просто различна вселена.
Между другото и за затваряне, ако приемем, че искате да намерите всички .txt файлове, които имате в $ HOME / Documents / и във всеки един да замените "my family" с "us", можете да се присъедините към 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, е по-прост. Благодаря KZKG ^ Гаара !!!.
Благодаря за коментара 🙂
Е, поне ми се струва, че това е по-просто от регулярните изрази ... че с толкова много „странни“ знаци може да се направи нещо наистина сложно за разбиране и научаване на неразумните.
Има "стара" поговорка там: "Имах проблем, реших да използвам регулярни изрази ... сега имам ДВА проблема" 😉
ХАХАХАХАХАХА !!!
Регулярните изрази могат да спасят живота ни в определен момент ... да, отнема много време, за да се научим как да ги използваме и да не умрем, опитвайки се.
Ако бях познавал тази команда преди години, БОЖЕ !! колко прост би бил животът ми 😀
Ясно! Добре обработени, те са много мощни 🙂 Нищо по-добро за манипулиране на текста. Но понякога, както казвате в този случай с 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/+» файл
O_O ... WTF!
Вече отворихте цяла вселена от опции за мен .. O_O
Обичам тези публикации, в които всички научаваме нещо 🙂
Не знаех и това.
Предпочитам да използвам директно vi ..
Толкова просто като:
:% s / us / моето семейство / g
% -> целият документ
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
Показано: Да живее родината ми
Благодаря за вашата помощ
"\" Трябва да използвате наклонената черта преди символите с двойно използване @, #, така че те да бъдат интерпретирани като текст.
И как да го направя в прозорци ????