Во одредени прилики, сакаме да го замениме текстот во датотека, на пример, промена во Document.txt сè што „моето семејство“ вели за „нас“. За да го постигнеме ова, можеме да го користиме нашиот претпочитан уредувач на текст (Кејт, Гедит, Сублима текст, итн.), Но секогаш е добро да се знаат варијанти, други начини да се постигне истиот резултат
Се случува тоа со редовни изрази ова може да се постигне, командата sed е едноставно величествена, има бесконечни варијанти и опции, но ... за оние кои сакаат само да го заменат текстот од најмалку можен сложен начин, за нив е тоа што ја донесов оваа многу поедноставна варијанта:
Следејќи го примерот, ја имаме датотеката Document.txt лоцирани во $ HOME / Document.txt со следниот текст:
(...) моето семејство тоа е како на сите нив, како на твоето или на соседот. Всушност моето семејство Ние се обидуваме да бидеме одговорни луѓе и во очите на општеството, политички и социјално коректни. Сепак, во мојата куќа има црна овца, а тоа е мојата улога ЛОЛ! Отсекогаш сум бил тој што не се плаши да каже што мисли (дури и ако тоа не е очигледно точно во очите на општеството), иако во реалноста на моето семејство му е преку глава од
нечистотијаденешното општество.
Со следнава команда ќе промените «моето семејство„од“нас":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Толку е едноставно 🙂
Значи, текстот би бил:
(...) нас тоа е како на сите нив, како на твоето или на соседот. Всушност нас Ние се обидуваме да бидеме одговорни луѓе и во очите на општеството, политички и социјално коректни. Сепак, во мојата куќа има црна овца, а тоа е мојата улога ЛОЛ! Отсекогаш сум бил тој што не се плаши да каже што мисли (дури и ако тоа не е очигледно точно во очите на општеството), иако во реалноста на моето семејство му е преку глава од
нечистотијаденешното општество.
Синтаксата е:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Командата може да изгледа малку сложена, ајде да ја разградиме малку и да ја објасниме малку поедноставно
- перл : Што ќе користиме, перл
- -пи : Пи, како π (приближна вредност од 3.14)
- -e : Е замислете го за „е да се изврши“ ^ - ^
- Потоа во наводници » отвораме со а s и се затвораме со a g: "sg" … Замислете ги S за почеток и G за игра над
- Свртете помеѓу sg мора да ставиме две групи на загради: [] y [], на тој начин: „S [] [] g“
- Внатре во првите загради како што реков погоре, текстот што сакаме да го отстраниме и замениме со нов, ќе оди, додека во вториот сет на загради ќе оди новиот текст што треба да се стави, следејќи го примерот: „С [моето семејство] [ние] г“
Едноставно нели?
Објаснувањето е всушност многу пообемно отколку што е потребно за командата, прилично е едноставно да се разбере
Перл е многу, многу повеќе од начин да се замени текстот, тој е цел јазик
Ако сакате да дознаете повеќе за тоа, инсталирајте го пакетот перл-доц и разгледајте кој што дозволува, тоа е само поинаков универзум.
Патем и да се затвори, претпоставувајќи дека сакате да ги пронајдете сите датотеки .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
Проблемот со оваа втора варијанта е што таа нема да се замени во датотеките што се наоѓаат во подпапки
Како и да е, се надевам дека ви беше интересно. За мене тоа беше навистина корисно, веќе можам да го заменам текстот директно од терминалот ... одлично! 😀
21 коментари, оставете ги вашите
Па, мислам дека многумина од нас тука ја знаат командата sed, која служи за истата цел, тоа го прави многу подобро и полесно е да се користи ...
Ви благодариме за вашиот коментар,
Само два детали, зошто велите дека sed го прави подобро? Дали е навистина полесно да се користи со толку многу „чудни“ карактери?
Поздрав до сите !!!. Ја користев командата жед, и методот опишан овде со перл е поедноставен. Фала КЗКГ ^ Гаара !!!.
Ви благодариме за коментарот
Па, барем ми се чини ова е поедноставно од редовните изрази ... дека со толку многу „чудни“ карактери, нешто неслојно за разбирање и учење може да му се направи на не-такт
Таму има „стара“ изрека: „Имав проблем, решив да користам Редовни изрази ... сега имам ДВА проблеми“
ХАХАХАХАХАХАХА !!!
Редовните изрази можат да ни го спасат животот во одредена точка ... да, потребно е долго време да научиме како да ги користиме и да не умреме обидувајќи се.
Да ја знаев оваа заповед пред години, БОГ !! колку едноставен ќе беше мојот живот
Јасно! Добро ракувани, тие се многу моќни ... Ништо подобро за манипулирање со текст. Но, понекогаш, како што велите во овој случај со Перл, не мора да одите толку далеку, ако замената е доволна.
Како и да е ќе го користев Пајтон :)
Но, во жед го гледам уште поедноставно ... дали правам нешто погрешно?
sed -i "ако / што-сакам-да-сменам / што е ново-за-ставам /" датотека-во-што-за-замени
хех хех ... и ако сакам да го заменам "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/+» датотека
О_О… WTF!
Сега ми отворивте цел универзум опции .. О_О
Ги обожавам овие објави каде сите учиме нешто
Ни јас не го знаев тоа.
Претпочитам да користам директно 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 el Perú
нов текст: Viva mi patria @percysalgado
Прикажано: Да живее мојата татковина
Ви благодариме за вашата помош
"\" Мора да ја користите цртачката линија пред знаците со двојна употреба @, #, така што тие се толкуваат како текст.
И како да го направам тоа во прозорци ????