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ść
bruddzisiejsze 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ść
bruddzisiejsze 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! 😀
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 ...
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?
Pozdrowienia dla wszystkich!!!. Użyłem polecenia sed, a metoda opisana tutaj w perlu jest prostsza. Dzięki KZKG ^ Gaara !!!.
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.
Istnieje «stare» powiedzenie: «Miałem problem, zdecydowałem się użyć wyrażeń regularnych ... teraz mam DWA problemy» 😉
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 😀
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 :)
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ć
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?
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
O_O… WTF!
Otworzyłeś teraz dla mnie cały wszechświat opcji ... O_O
Uwielbiam te posty, w których wszyscy się czegoś uczymy 🙂
Tego też nie wiedziałem.
Wolę używać bezpośrednio vi ..
Tak prosty jak:
:% s / us / moja rodzina / g
% -> cały dokument
s -> szukaj
g -> wszystkie wystąpienia
Pozdrowienia ..
Dzięki!
Nie wiedziałem, jak to zrobić z vi
Dodano do ulubionych!
Dzięki!
Spójrz, jeśli masz trochę czasu na polecenie rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Ś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
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?
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
"\" Musisz użyć ukośnika przed znakami z podwójnym użyciem @, #, aby były interpretowane jako tekst.
A jak mam to zrobić w windowsie ????