Заменете го текстот во датотеките со само една команда: перл

Во одредени прилики, сакаме да го замениме текстот во датотека, на пример, промена во 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 коментари, оставете ги вашите

Оставете го вашиот коментар

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени со *

*

*

  1. Одговорен за податоците: Мигел Анхел Гатон
  2. Цел на податоците: Контролирајте СПАМ, управување со коментари.
  3. Легитимација: Ваша согласност
  4. Комуникација на податоците: Податоците нема да бидат соопштени на трети лица освен со законска обврска.
  5. Складирање на податоци: База на податоци хостирани од Occentus Networks (ЕУ)
  6. Права: Во секое време можете да ги ограничите, вратите и избришете вашите информации.

  1.   бум dijo

    Па, мислам дека многумина од нас тука ја знаат командата sed, која служи за истата цел, тоа го прави многу подобро и полесно е да се користи ...

    1.    КЗКГ ^ Гаара dijo

      Ви благодариме за вашиот коментар,
      Само два детали, зошто велите дека sed го прави подобро? Дали е навистина полесно да се користи со толку многу „чудни“ карактери?

  2.   Федерико А. Валдес Тујаг dijo

    Поздрав до сите !!!. Ја користев командата жед, и методот опишан овде со перл е поедноставен. Фала КЗКГ ^ Гаара !!!.

    1.    КЗКГ ^ Гаара dijo

      Ви благодариме за коментарот
      Па, барем ми се чини ова е поедноставно од редовните изрази ... дека со толку многу „чудни“ карактери, нешто неслојно за разбирање и учење може да му се направи на не-такт

      1.    Гискард dijo

        Таму има „стара“ изрека: „Имав проблем, решив да користам Редовни изрази ... сега имам ДВА проблеми“

        1.    КЗКГ ^ Гаара dijo

          ХАХАХАХАХАХАХА !!!
          Редовните изрази можат да ни го спасат животот во одредена точка ... да, потребно е долго време да научиме како да ги користиме и да не умреме обидувајќи се.

          Да ја знаев оваа заповед пред години, БОГ !! колку едноставен ќе беше мојот живот

          1.    Гискард dijo

            Јасно! Добро ракувани, тие се многу моќни ... Ништо подобро за манипулирање со текст. Но, понекогаш, како што велите во овој случај со Перл, не мора да одите толку далеку, ако замената е доволна.
            Како и да е ќе го користев Пајтон :)

    2.    насилник dijo

      Но, во жед го гледам уште поедноставно ... дали правам нешто погрешно?

      sed -i "ако / што-сакам-да-сменам / што е ново-за-ставам /" датотека-во-што-за-замени

      1.    КЗКГ ^ Гаара dijo

        хех хех ... и ако сакам да го заменам "http://my.blog.com/content/" со "http://my.blog.com/uploads/files/" 😀 ... веќе таму треба да ставите \ со празни места и други , и станува сложено или не?

        1.    насилник dijo

          Не е задолжително да се користи / како сепаратор. Погледни со +

          sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» датотека

          1.    КЗКГ ^ Гаара dijo

            О_О… WTF!
            Сега ми отворивте цел универзум опции .. О_О

          2.    Гискард dijo

            Ги обожавам овие објави каде сите учиме нешто
            Ни јас не го знаев тоа.

  3.   RAW-Основни dijo

    Претпочитам да користам директно vi ..

    Едноставно:
    :% s / нас / моето семејство / гр

    % -> целиот документ
    s -> пребарување
    g -> сите појави

    Поздрав ..

    1.    КЗКГ ^ Гаара dijo

      Ви благодариме!
      Не знаев како да го направам тоа со vi

  4.   st0rmt4il dijo

    Додадено во омилени!

    Ви благодариме!

  5.   n3 бура dijo

    Погледнете го ако имате малку команда rpl

    http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/

  6.   ДуранГ dijo

    Одличен влез! Во случај некој да е заинтересиран, истото со командата Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Сомневање dijo

      И што се случува ако во датотеката она што сакам да го заменам има наводници?
      Пример заменете го она што вели текст: »1 ″ со текст:» 2
      како би била командата?

  7.   Перси салгадо dijo

    Здраво

    Сакав да заменам низа што има @ во средина и го менуваше текстот само пред at.

    текст за промена: Viva el Perú
    нов текст: Viva mi patria @percysalgado
    Прикажано: Да живее мојата татковина

    Ви благодариме за вашата помош

  8.   Анонимен dijo

    "\" Мора да ја користите цртачката линија пред знаците со двојна употреба @, #, така што тие се толкуваат како текст.

  9.   ГАБА dijo

    И како да го направам тоа во прозорци ????