Előfordul, hogy egy fájlon belüli szöveget szeretnénk lecserélni, például a Document.txt fájlban a „családom” szót „mi”-re cseréljük . Ehhez használhatjuk a kedvenc szövegszerkesztőnket (Kate, Gedit, Sublime Text stb.), de mindig jó ismerni az alternatívákat, vagyis más módszereket is, amelyekkel ugyanazt az eredményt érhetjük el.
Kiderült, hogy reguláris kifejezésekkel ez elérhető; a `sed` parancs egyszerűen nagyszerű, végtelen variációval és opcióval rendelkezik, de… azoknak, akik csak a lehető legkevésbé bonyolult módon szeretnék szöveget helyettesíteni , elhozom ezt a sokkal egyszerűbb változatot:
A példát követve a Document.txt fájl a $HOME/Document.txt mappában található , a következő szöveggel:
Az én családom olyan, mint bárki másé, mint a tiéd, vagy a szomszédodé. Sőt, a családom igyekszik felelősségteljes emberek lenni a társadalom szemében, politikailag és társadalmilag korrektek. Azonban van egy fekete bárány a házamban, és ez az én szerepem, LOL! Mindig is én voltam az, aki nem fél kimondani, amit gondolok (még akkor is, ha az társadalmilag nem elfogadható), bár valójában a családomnak elege van a mai
elfajult társadalomból.
A következő parancs a " my family " szót " us " -ra változtatja :
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Ilyen egyszerű
Tehát a szöveg a következő lenne:
(…) olyanok vagyunk , mint bárki más, mint a tiéd vagy a szomszédod. Sőt, igyekszünk felelősségteljes emberek lenni a társadalom szemében, politikailag és társadalmilag korrektek. Van azonban egy fekete bárány a házamban, és ez az én dolgom, LOL! Mindig is én voltam az, aki nem fél kimondani, amit gondolok (még akkor is, ha az látszólag nem helyes a társadalom szemében), bár valójában a családomnak elege van a mai társadalom mocskából
.
A szintaxis a következő:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
A parancs kissé bonyolultnak tűnhet, bontsuk egy kicsit, és magyarázzuk el egy kicsit egyszerűbben
- perl : Mit fogunk használni, perl
- -pi : Pí, hogyan π (hozzávetőleges értéke 3.14)
- -e : Az E képzeli el, hogy «e végrehajtja» ^ - ^
- Majd idézőjelben » a-val nyitunk s és bezárunk egy g: "vmi" …képzelje el az S-t a kezdéshez és a G-t a Game Over-hez
- Forduljon a sg két zárójelet kell tennünk: [] y [], mivel ilyen: "S [] [] g"
- Az első zárójelek belsejében, amint azt fentebb mondtam, az a szöveg kerül, amelyet el akarunk távolítani és lecserélni egy úttal, míg a második zárójelben az új szöveg kerül a példára: "S [családom] [mi] g"
Ugye egyszerű?
A magyarázat valójában sokkal hosszabb, mint ami a parancshoz szükséges, elég egyszerű megérteni
A Perl sokkal, de sokkal több, mint a szöveg helyettesítésének módja, ez egy egész nyelv
Ha többet szeretnél megtudni róla, telepítsd a perl-doc csomagot , és nézd meg mindent, amit lehetővé tesz; ez egyszerűen egy másik univerzum.
Egyébként és bezárásként, feltételezve, hogy meg akarja találni az összes .txt fájlt, amely a $ HOME / Documents / fájlban található, és mindegyikben kicseréli a "családom" szót "velünk", csatlakozhat a find + perl programhoz ennek eléréséhez:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Vagy helyettesítő karakter használatával:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Ezzel a második változattal az a probléma, hogy nem cseréli le a almappákban lévő fájlokat
Mindenesetre remélem érdekesnek találtad. Számomra nagyon hasznos volt, most már közvetlenül a terminálról tudok szöveget cserélni... remek!