Kartais norime pakeisti tekstą faile, pavyzdžiui, faile Document.txt viską, kas parašyta „mano šeima“, pakeisti į „mes“ . Tam galime naudoti mėgstamą teksto redaktorių („Kate“, „Gedit“, „Sublime Text“ ir kt.), tačiau visada pravartu žinoti alternatyvas, kitus būdus, kaip pasiekti tą patį rezultatą.
Pasirodo, tai galima pasiekti naudojant reguliarias išraiškas ; komanda „sed“ yra tiesiog nuostabi, ji turi begalę variacijų ir parinkčių, bet... tiems, kurie nori pakeisti tekstą kuo paprasčiau , pateikiu šį daug paprastesnį variantą:
Remiantis pavyzdžiu, turime failą Document.txt, esantį $HOME/Document.txt , su tokiu tekstu:
Mano šeima yra kaip ir visų kitų – kaip tavo ar tavo kaimyno. Tiesą sakant, mano šeima stengiasi būti atsakingais žmonėmis visuomenės akyse, politiškai ir socialiai korektiška. Tačiau mano namuose yra juoda avis, ir tai yra mano vaidmuo, LOL! Aš visada buvau ta, kuri nebijo pasakyti, ką galvoju (net jei tai nėra socialiai priimtina), nors iš tikrųjų mano šeimai atsibodo šiandieninė
sujaukta visuomenė.
Ši komanda pakeis „ my family “ į „ us “:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Tai taip paprasta
Taigi tekstas būtų:
(...) mes esame tokie patys kaip visi kiti, kaip jūsiškiai ar jūsų kaimynai. Tiesą sakant, stengiamės būti atsakingi žmonės visuomenės akyse, politiškai ir socialiai korektiški. Tačiau mano namuose yra juoda avis, ir tai yra mano vaidmuo, LOL! Aš visada buvau tas, kuris nebijo pasakyti, ką manau (net jei tai neatrodo teisinga visuomenės akyse), nors iš tikrųjų mano šeimai atsibodo šiandienos visuomenės
nešvara .
Sintaksė yra:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Komanda gali atrodyti šiek tiek sudėtinga, šiek tiek suskaidykime ją ir paaiškinkime šiek tiek paprasčiau
- perl : Ką naudosime, perl
- -pi : Pí, kaip π (apytikslė vertė 3.14)
- -e : E įsivaizduoja, kad „e įvykdytų“ ^ - ^
- Tada kabutėse » mes atidarome su s ir mes užsidarome su g: „sg“ ...įsivaizduokite S, kad būtų pradėtas, ir G, kad būtų baigtas žaidimas
- Pasukite tarp sg turime įdėti du skliaustų rinkinius: [] y []būdamas tokiu būdu: „S [] [] g“
- Pirmųjų skliaustų viduje, kaip sakiau aukščiau, bus tekstas, kurį norime pašalinti ir pakeisti nauju, o antrajame skliaustų rinkinyje bus pateiktas naujas tekstas pagal pavyzdį: „S [mano šeima] [mes] g“
Paprasta, ar ne?
Paaiškinimas iš tikrųjų yra daug ilgesnis nei būtina komandai, jį gana paprasta suprasti
Perl yra daug, daug daugiau nei būdas pakeisti tekstą, tai yra visa kalba
Jei norite sužinoti daugiau, įdiekite „perl-doc“ paketą ir peržiūrėkite viską, ką jis leidžia; tai tiesiog kita visata.
Beje, jei norite uždaryti, darant prielaidą, kad norite rasti visus .txt failus, kuriuos turite „$ HOME“ / „Documents“, ir kiekviename iš jų pakeisti „mano šeimą“ į „mus“, galite prisijungti prie „find + perl“, kad tai pasiektumėte:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
Arba naudojant pakaitos simbolį:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Šio antrojo varianto problema yra ta, kad jis nepakeis failų, esančių poaplankiuose
Bet kokiu atveju, tikiuosi, kad jums tai buvo įdomu. Man tai buvo tikrai naudinga, dabar galiu pakeisti tekstą tiesiai iš terminalo... puiku!