Ndonjëherë duam të zëvendësojmë tekstin brenda një skedari, për shembull, duke ndryshuar gjithçka që thotë "familja ime" në "ne" në Document.txt . Për ta bërë këtë, mund të përdorim redaktuesin tonë të preferuar të tekstit (Kate, Gedit, Sublime Text, etj.), por është gjithmonë mirë të dimë alternativa, mënyra të tjera për të arritur të njëjtin rezultat.
Rezulton se me shprehje të rregullta kjo mund të arrihet; komanda `sed` është thjesht madhështore, ka variacione dhe mundësi të pafundme, por… për ata që duan të zëvendësojnë tekstin vetëm në mënyrën më pak komplekse të mundshme , po ju sjell këtë variant shumë më të thjeshtë:
Duke ndjekur shembullin, kemi skedarin Document.txt të vendosur në $HOME/Document.txt me tekstin e mëposhtëm:
Familja ime është si e të gjithëve, si e jotja ose e fqinjit tënd. Në fakt, familja ime përpiqet të jetë njerëz të përgjegjshëm në sytë e shoqërisë, politikisht dhe shoqërisht korrektë. Megjithatë, ka një dele të zezë në shtëpinë time, dhe ky është roli im, LOL! Gjithmonë kam qenë ai që nuk ka frikë të thotë atë që mendon (edhe nëse nuk është e pranueshme shoqërisht), megjithëse në realitet, familja ime është e ngopur me shoqërinë
e rrëmujshmetë sotme.
Komanda e mëposhtme do ta ndryshojë " familja ime " në " ne ":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Është kaq e thjeshtë
Kështu që teksti do të ishte:
(…) ne jemi si të gjithë të tjerët, si tuajat ose si të fqinjit tuaj. Në fakt, ne përpiqemi të jemi njerëz të përgjegjshëm në sytë e shoqërisë, politikisht dhe shoqërisht korrektë. Megjithatë, ka një dele të zezë në shtëpinë time, dhe ky është roli im, LOL! Gjithmonë kam qenë ai që nuk ka frikë të thotë atë që mendon (edhe nëse nuk duket e saktë në sytë e shoqërisë), megjithëse në realitet familja ime është e ngopur me pisllëkun
eshoqërisë së sotme.
Sintaksa është:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Komanda mund të duket pak e ndërlikuar, le ta zbërthejmë pak dhe ta shpjegojmë pak më thjesht
- perl : Çfarë do të përdorim, perl
- -pi : Pí, si π (vlera e përafërt e 3.14)
- -e : E imagjinoni që «të ekzekutohet» ^ - ^
- Pastaj në thonjëza » ne hapemi me një s dhe ne mbyllim me një g: "sg" …imagjinoni S për Start dhe G për Game Over
- Kthehuni midis sg ne duhet të vendosim dy grupe të kllapave: [] y [], duke qenë kështu: "S [] [] g"
- Brenda kllapave të para siç thashë më lart, teksti që duam të heqim dhe zëvendësojmë me një të ri do të shkojë, ndërsa në grupin e dytë të kllapave do të shkojë teksti i ri për të vendosur, duke ndjekur shembullin: "S [familja ime] [ne] g"
E thjeshtë apo jo?
Shpjegimi është në fakt shumë më i gjatë se sa është e nevojshme për komandën, është mjaft e thjeshtë për t'u kuptuar
Perl është shumë, shumë më tepër se një mënyrë për të zëvendësuar tekstin, është një gjuhë e tërë
Nëse doni të mësoni më shumë rreth kësaj, instaloni paketën perl-doc dhe hidhini një sy gjithçkaje që lejon; është thjesht një univers i ndryshëm.
Nga rruga dhe për të mbyllur, duke supozuar se dëshironi të gjeni të gjitha skedarët .txt që keni në $ HOME / Documents / dhe në secilin prej tyre të zëvendësoni "familjen time" me "ne", ju mund të bashkoheni në find + perl për ta arritur këtë:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Ose duke përdorur një kartë të egër:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Problemi me këtë variant të dytë është se ai nuk do të zëvendësojë skedarët që janë në nënfolderët
Gjithsesi, shpresoj t'ju duket interesante. Për mua ka qenë vërtet e dobishme, tani mund ta zëvendësoj tekstin direkt nga terminali... shkëlqyeshëm!