Sa ilang mga okasyon nais naming palitan ang teksto sa loob ng isang file, halimbawa, baguhin sa Dokumento.txt lahat ng sinasabi ng "aking pamilya" para sa "amin." Upang makamit ito maaari naming gamitin ang aming ginustong text editor (Kate, Gedit, SublimeText, atbp) ngunit palaging mahusay na malaman ang mga variant, iba pang mga paraan upang makamit ang parehong resulta 🙂
Nangyayari iyon sa regular na expression maaari mo itong makamit, ang utos na sed ay kahanga-hanga, mayroon itong walang katapusang mga pagkakaiba-iba at mga pagpipilian ngunit ... para sa mga nais lamang palitan ang teksto mula sa hindi gaanong kumplikadong paraan hangga't maaari, para sa kanila ay dinala ko ang mas simpleng uri na ito:
Kasunod sa halimbawa, mayroon kaming file Dokumento.txt matatagpuan sa $ HOME / Document.txt kasama ang sumusunod na teksto:
(...) ang aking pamilya Ito ay tulad ng kanilang lahat, tulad ng sa iyo o sa iyong kapit-bahay. Sa totoo lang ang aking pamilya Sinusubukan naming maging responsable na mga tao at sa mata ng lipunan, tama sa pampulitika at panlipunan. Gayunpaman, sa aking bahay mayroong isang itim na tupa, at iyon ang aking tungkulin LOL!. Palagi akong naging isa na hindi natatakot na sabihin kung ano ang iniisip niya (kahit na ito ay tila hindi tama sa mga mata ng lipunan), kahit na sa totoo lang ang aking pamilya ay nagsawa na
dumilipunan ngayon.
Sa sumusunod na utos magbabago ka «ang aking pamilya"ni"kami":
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Ganon lang kasimple
Kaya't ang teksto ay magiging:
(...) kami Ito ay tulad ng kanilang lahat, tulad ng sa iyo o sa iyong kapit-bahay. Sa totoo lang kami Sinusubukan naming maging responsable na mga tao at sa mata ng lipunan, tama sa pampulitika at panlipunan. Gayunpaman, sa aking bahay mayroong isang itim na tupa, at iyon ang aking tungkulin LOL!. Palagi akong naging isa na hindi natatakot na sabihin kung ano ang iniisip niya (kahit na ito ay tila hindi tama sa mga mata ng lipunan), kahit na sa totoo lang ang aking pamilya ay nagsawa na
dumilipunan ngayon.
Ang syntax ay:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Ang utos ay maaaring mukhang medyo kumplikado, paghiwalayin natin ito nang kaunti at ipaliwanag ito nang kaunti nang mas simple 😉
- perlas : Ang gagamitin namin, perl
- -pi : Pí, paano π (ang tinatayang halaga ng 3.14)
- -e : Ang E akala ito para sa «e upang maisagawa» ^ - ^
- Pagkatapos sa mga quote » buksan namin sa a s at nagsasara kami ng a g: "sg" … Isipin ang S para sa Pagsisimula at ang G para sa Game Over 😀
- Lumiko sa pagitan ng sg dapat kaming maglagay ng dalawang hanay ng mga braket: [] y [], pagiging ganoon: "S [] [] g"
- Sa loob ng mga unang braket tulad ng sinabi ko sa itaas, ang teksto na nais naming alisin at palitan ng bago ay pupunta, habang sa pangalawang hanay ng mga bracket ang bagong teksto na ilalagay ay mapupunta, sumusunod sa halimbawa: "S [aking pamilya] [kami] g"
Simple di ba?
Ang paliwanag ay talagang mas malawak kaysa sa kung ano ang kinakailangan para sa utos, ito ay medyo simple upang maunawaan 🙂
Ang Perl ay marami, higit pa sa isang paraan upang mapalitan ang teksto, ito ay isang buong wika 😉
Kung nais mong matuto nang higit pa tungkol dito, i-install ang package perl-doc at tingnan ang whooodo kung ano ang pinapayagan nito, ibang uniberso lang ito.
Sa pamamagitan ng paraan at upang isara, ipagpapalagay na nais mong hanapin ang lahat ng mga .txt file na mayroon ka sa $ HOME / Documents / at sa bawat isa palitan ang "aking pamilya" ng "amin", maaari kang sumali sa hanapin + perl upang makamit ito:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
O gumagamit ng isang wildcard:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
Ang problema sa pangalawang variant na ito ay hindi nito papalitan ang mga file na nasa mga subfolder 🙂
Gayunpaman, sana ay nahanap mo itong kawili-wili. Para sa akin talagang kapaki-pakinabang ito, mapapalitan ko nang direkta ang teksto mula sa terminal ... mahusay! 😀
Sa gayon, sa palagay ko marami sa atin dito ang nakakaalam ng utos ng sed, na nagsisilbi ng parehong layunin, ginagawa itong mas mahusay at mas madaling gamitin ...
Salamat sa pahayag mo,
Dalawang detalye lamang, bakit mo nasabi na ang sed ay nagpapabuti nito? Mas madaling gamitin ba ito sa maraming mga 'kakatwang' character?
Pagbati sa lahat !!!. Nagamit ko na ang utos uhaw, at ang pamamaraang inilarawan dito na may perl ay mas simple. Salamat KZKG ^ Gaara !!!.
Salamat sa komento 🙂
Sa totoo lang, para sa akin ito ay mas simple kaysa sa regular na mga expression ... na sa maraming mga 'kakatwang' character, isang bagay na talagang kumplikado upang maunawaan at matutunan ay maaaring gawin sa hindi marunong.
Mayroong isang «luma» na kasabihan doon: «Nagkaroon ako ng isang problema, nagpasya akong gumamit ng Mga Regular na Ekspresyon ... ngayon mayroon akong DALAWANG problema» 😉
HAHAHAHAHAHAHA !!!
Ang mga regular na expression ay maaaring mai-save ang aming mga buhay sa isang tiyak na punto ... oo, ito ay tumatagal ng mahabang oras upang malaman kung paano gamitin ang mga ito at hindi mamatay sinusubukan.
Kung alam ko ang utos na ito taon na ang nakakalipas, DIYOS !! kung gaano kasimple ang buhay ko 😀
Malinaw! Mahusay na hawakan, napakalakas nila 🙂 Walang mas mahusay na manipulahin ang teksto. Ngunit kung minsan, tulad ng sinasabi mo sa kasong ito kay Perl, hindi mo na kailangang lumayo sa ganoon kung sapat na ang isang kapalit.
Gagamitin ko sana ang Python :)
Ngunit sa uhaw nakikita ko itong mas simple ... may mali ba akong ginagawa?
sed -i "yes / what-I-want-to-change / new-to-put /" file-in-which-to-replacement
heh heh ... at kung nais kong palitan ang "http://my.blog.com/content/" ni "http://my.blog.com/uploads/files/" 😀 ... nandiyan ka na bang maglagay ng \ mga puwang at iba pa , at ito ay naging kumplikado o hindi?
Hindi ipinag-uutos na gamitin / bilang isang separator. Tumingin kasama si +
sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+» file
O_O… WTF!
Binuksan mo ang isang buong uniberso ng mga pagpipilian para sa akin ngayon .. O_O
Gusto ko ang mga post na ito kung saan lahat tayo ay may natutunan something
Hindi ko din alam yun.
Mas gusto kong gamitin nang direkta vi ..
Kasing simple ng:
:% s / us / aking pamilya / g
% -> buong dokumento
s -> paghahanap
g -> lahat ng mga pangyayari
Pagbati ...
Salamat sa iyo!
Hindi ko alam kung paano gawin ito sa vi
Naidagdag sa mga paborito!
Salamat sa iyo!
Tingnan kung mayroon kang ilang sandali sa utos ng rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Mahusay na pagpasok! Kung sakaling may interesado, pareho sa utos ng Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
At ano ang mangyayari kung sa loob ng file ang nais kong palitan ay may mga quote?
Halimbawa palitan ang sinasabi ng teksto: »1 ″ sa pamamagitan ng teksto:» 2 ″
paano ang utos?
Hello
Nais kong palitan ang isang string na mayroong isang @ sa gitna at binago lamang ang teksto ng bago ang sa.
teksto upang baguhin: Mabuhay ang Peru
bagong teksto: Viva mi patria @percysalgado
Ipinakita: Mabuhay ang aking bayan
Salamat sa iyong tulong
"\" Dapat mong gamitin ang slash bago ang mga character na may doble na paggamit @, #, upang ang mga ito ay mabigyan ng kahulugan bilang teksto.
At paano ko ito gagawin sa windows ????