Zastąp tekst w plikach jednym poleceniem: perl

Czasami chcemy zamienić tekst w pliku, na przykład zmienić w Document.txt wszystko, co „moja rodzina” mówi o „nas”. Aby to osiągnąć, możemy skorzystać z naszego preferowanego edytora tekstu (Kate, Gedit, SublimeText itp.), Ale zawsze dobrze jest znać warianty, inne sposoby na osiągnięcie tego samego wyniku 🙂

Zdarza się, że z wyrażenia regularne można to osiągnąć, polecenie sed jest po prostu wspaniałe, ma nieskończone warianty i opcje, ale ... dla tych, którzy chcą po prostu zastąpić tekst z najmniej skomplikowany sposób, dla nich sprowadzam ten znacznie prostszy wariant:

Idąc za przykładem, mamy plik Document.txt znajduje się w $ HOME / Document.txt z następującym tekstem:

(...) moja rodzina To jest jak one wszystkie, jak twoje lub twojego sąsiada. w rzeczywistości moja rodzina Staramy się być ludźmi odpowiedzialnymi i w oczach społeczeństwa poprawnymi politycznie i społecznie. Jednak w moim domu jest czarna owca i to jest moja rola LOL! Zawsze byłem tym, który nie boi się powiedzieć, co myśli (nawet jeśli nie jest to pozornie słuszne w oczach społeczeństwa), chociaż w rzeczywistości moja rodzina ma dość brud dzisiejsze społeczeństwo.

Następującym poleceniem zmienisz «moja rodzina" przez "nam":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

To takie proste 🙂

Tak więc tekst wyglądałby tak:

(...) nam To jest jak one wszystkie, jak twoje lub twojego sąsiada. w rzeczywistości nam Staramy się być ludźmi odpowiedzialnymi i w oczach społeczeństwa poprawnymi politycznie i społecznie. Jednak w moim domu jest czarna owca i to jest moja rola LOL! Zawsze byłem tym, który nie boi się powiedzieć, co myśli (nawet jeśli nie jest to pozornie słuszne w oczach społeczeństwa), chociaż w rzeczywistości moja rodzina ma dość brud dzisiejsze społeczeństwo.

Składnia jest następująca:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Polecenie może wydawać się nieco skomplikowane, podzielmy je trochę i wyjaśnijmy nieco prościej 😉

  • Perl : Czego będziemy używać, perl
  • -Liczba Pi : Pí, jak π (przybliżona wartość 3.14)
  • -e : E wyobraź sobie to, aby «e wykonać» ^ - ^
  • Następnie w cudzysłowie » otwieramy za pomocą s i zamykamy za pomocą g: "sg" … Wyobraź sobie S jak Start i G jak Game Over 😀
  • Skręć między sg musimy umieścić dwa zestawy nawiasów: [] y []będąc w ten sposób: „S [] [] g”
  • Wewnątrz pierwszych nawiasów, jak powiedziałem powyżej, zostanie umieszczony tekst, który chcemy usunąć i zastąpić nowym, podczas gdy w drugim zestawie nawiasów zostanie umieszczony nowy tekst do wstawienia, zgodnie z przykładem: „S [moja rodzina] [my] g”

Proste, prawda?

Wyjaśnienie jest w rzeczywistości znacznie szersze niż to, co jest konieczne dla polecenia, jest dość łatwe do zrozumienia 🙂

Perl to dużo, dużo więcej niż sposób na zamianę tekstu, to cały język 😉

Jeśli chcesz dowiedzieć się więcej na ten temat, zainstaluj pakiet perl-doc i spójrz na kogo, na co to pozwala, to po prostu inny wszechświat.

Przy okazji i na zakończenie, zakładając, że chcesz znaleźć wszystkie pliki .txt, które masz w $ HOME / Documents / i w każdym z nich zamień „moja rodzina” na „nas”, możesz dołączyć do find + perl, aby to osiągnąć:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

Lub używając symbolu wieloznacznego:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Problem z tym drugim wariantem polega na tym, że nie będzie on zastępował plików znajdujących się w podfolderach 🙂

Tak czy inaczej, mam nadzieję, że to dla Ciebie interesujące. Dla mnie to było naprawdę przydatne, mogę już podmieniać tekst bezpośrednio z terminala ... super! 😀


21 komentarzy, zostaw swoje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Bum powiedział

    Cóż, myślę, że wielu z nas tutaj zna polecenie sed, które służy temu samemu celowi, czyni go znacznie lepszym i łatwiejszym w użyciu ...

    1.    KZKG ^ Gaara powiedział

      Dzięki za komentarz,
      Tylko dwa szczegóły, dlaczego mówisz, że sed czyni to lepszym? Czy naprawdę łatwiej jest używać tak wielu „dziwnych” postaci?

  2.   Federico A. Valdes Toujague powiedział

    Pozdrowienia dla wszystkich!!!. Użyłem polecenia sed, a metoda opisana tutaj w perlu jest prostsza. Dzięki KZKG ^ Gaara !!!.

    1.    KZKG ^ Gaara powiedział

      Dzięki za komentarz 🙂
      Cóż, przynajmniej dla mnie wydaje się to prostsze niż wyrażenia regularne ... że przy tak wielu „dziwnych” znakach, coś naprawdę trudnego do zrozumienia i nauczenia się może być zrobione dla niezbyt doświadczonych.

      1.    giskard powiedział

        Istnieje «stare» powiedzenie: «Miałem problem, zdecydowałem się użyć wyrażeń regularnych ... teraz mam DWA problemy» 😉

        1.    KZKG ^ Gaara powiedział

          HAHAHAHAHAHAHA !!!
          Wyrażenia regularne mogą w pewnym momencie uratować nam życie ... tak, nauczenie się ich używania zajmuje dużo czasu i nie umiera próbując.

          Gdybym znał to polecenie lata temu, BÓG !! jakie proste byłoby moje życie 😀

          1.    giskard powiedział

            Jasny! Dobrze obsługiwane są bardzo potężne 🙂 Nie ma nic lepszego do manipulowania tekstem. Ale czasami, jak mówisz w tym przypadku w przypadku Perla, nie musisz posuwać się tak daleko, jeśli wystarczy zamiana.
            I tak użyłbym Pythona :)

    2.    łowca powiedział

      Ale w pragnieniu widzę to jeszcze prostsze… czy robię coś źle?

      sed -i "jeśli / co-chcę-zmienić / nowy-do-wstawienia /" plik-w-który-zastąpić

      1.    KZKG ^ Gaara powiedział

        heh heh ... i jeśli chcę zamienić "http://my.blog.com/content/" na "http://my.blog.com/uploads/files/" 😀 ... już tam musisz wstawić \ ze spacjami i innymi i staje się skomplikowane, czy nie?

        1.    łowca powiedział

          Używanie / jako separatora nie jest obowiązkowe. Spójrz z +

          sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» plik

          1.    KZKG ^ Gaara powiedział

            O_O… WTF!
            Otworzyłeś teraz dla mnie cały wszechświat opcji ... O_O

          2.    giskard powiedział

            Uwielbiam te posty, w których wszyscy się czegoś uczymy 🙂
            Tego też nie wiedziałem.

  3.   RAW-podstawowy powiedział

    Wolę używać bezpośrednio vi ..

    Tak prosty jak:
    :% s / us / moja rodzina / g

    % -> cały dokument
    s -> szukaj
    g -> wszystkie wystąpienia

    Pozdrowienia ..

    1.    KZKG ^ Gaara powiedział

      Dzięki!
      Nie wiedziałem, jak to zrobić z vi

  4.   st0rmt4il powiedział

    Dodano do ulubionych!

    Dzięki!

  5.   n3burza powiedział
  6.   Duran G powiedział

    Świetny wpis! Jeśli ktoś jest zainteresowany, to samo z poleceniem sed Linuksa: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Wątpię powiedział

      A co się stanie, jeśli w pliku to, co chcę zamienić, ma cudzysłowy?
      Przykład zamień to, co mówi tekst: »1 ″ tekstem:» 2 ″
      jak wyglądałoby polecenie?

  7.   Percy salgado powiedział

    Halo

    Chciałem zamienić ciąg, który miał znak @ w środku i zmieniłem tylko tekst na przed at.

    tekst do zmiany: Niech żyje Peru
    nowy tekst: Viva mi patria @percysalgado
    Pokazano: Niech żyje moja ojczyzna

    Dzięki za pomoc

  8.   anonimowy powiedział

    "\" Musisz użyć ukośnika przed znakami z podwójnym użyciem @, #, aby były interpretowane jako tekst.

  9.   Gaba powiedział

    A jak mam to zrobić w windowsie ????