Reklāma
Divas no visnozīmīgāk novērtētajām Linux utilītām ir Seds un Awks. Lai gan tie, protams, var šķist nedaudz lieki, ja kādreiz ir jāveic atkārtotas izmaiņas lielos koda vai teksta gabalos vai ja jums kādreiz ir jāanalizē kāds teksts, Seds un Awks ir nenovērtējami.
Kas tie ir? Kā tos izmanto? Un kā, apvienojot tos, tie atvieglo teksta apstrādi?
Kas ir Sed?
Sed tika izstrādāta 1971. gadā plkst Bell Labs, leģendārais skaitļošanas pionieris Lī E. Makmahons.
Nosaukums apzīmē straumes redaktors, un tas ir tikai tas, ko tas dara. Tas ļauj rediģēt tekstu vai teksta straumes programmatiski, izmantojot kompaktu un vienkāršu, tomēr pilnvērtīgu programmēšanas valodu.
Veids, kā tas darbojas, ir vienkāršs: tas rindiņu pa rindiņai nolasa tekstu buferī. Katrā rindiņā tā attiecīgā gadījumā izpildīs iepriekš definētās instrukcijas.
Piemēram, ja kāds uzrakstīja Sed skriptu, kas vārdu “alus” aizstāja ar “soda”, un pēc tam ievadīja teksta failā, kurā bija viss dziesmas vārdam “99 pudeles alus uz sienas”, tas iet caur šo failu pa rindām un izdrukā “99 pudeles soda uz sienas”, un tā ieslēgts
Visvienkāršākais Sed skripts ir Hello World. Šeit mēs izmantojam Unix Echo utilītu, kas tikai izvada virknes, lai drukātu “Hello World”. Bet mēs to nosūtām uz Sedu un sakām, lai aizstātu “World” ar “Dave”. Pašsaprotami sīkumi.
atbalss "Sveika pasaule" | sed s / pasaule / Deivs
Sed instrukcijas var arī apvienot failos, ja jums jāveic kāda sarežģītāka rediģēšana. Iedvesmots šo jautro Reddit pavedienu, Es ņemšu dziesmu vārdus uz A-Ha’s Ņem par maniun aizstājiet katru “Es”, “Es” un “Mans” gadījumu ar Gregu.
Pirmkārt, dziesmas tekstu ievietošu teksta failā ar nosaukumu tom.txt. Tad es atveršu vēlamo teksta redaktoru (manu mīļākais ir Vims Galvenie 7 iemesli, kāpēc Vim teksta redaktoram ir iespējaGadiem ilgi esmu izmēģinājis vienu teksta redaktoru pēc otra. Jūs to nosaucat, es to izmēģināju. Katru no šiem redaktoriem es izmantoju vairāk nekā divus mēnešus kā galveno ikdienas redaktoru. Kaut kā es ... Lasīt vairāk , bet Nano nano vs. vim: termināļa teksta redaktoru salīdzinājumsLai arī Linux ir kļuvis pietiekami ērts un praktiski izmantojams ikvienam, nekad nav jāizmanto terminālis, ir daži no mums, kuri to regulāri lieto vai ir ieinteresēti, kā tos kontrolēt ... Lasīt vairāk un Gedit gedit: viens no vispilnīgākajiem vienkāršā teksta redaktoriem [Linux un Windows]Kad domājat par vienkārša teksta redaktoriem, pirmā lieta, kas var ienākt jūsu galvā, ir Windows lietojumprogramma Notepad. Tas dara tieši to, kas norādīts amata aprakstā - vienkārša teksta funkcijas ... Lasīt vairāk ir lieliska izvēle), un pievienojiet šādas rindiņas. Pārliecinieties, vai izveidotais fails beidzas .s.
Varētu pamanīt, ka iepriekšējā piemērā esmu atkārtojis sevi (piemēram, s / me / Greg / un s / Me / Greg /). Tas ir tāpēc, ka dažas Sed versijas, piemēram, tās, kuras tiek piegādātas kopā ar Mac OS X, to dara nē atbalsta lielo un mazo burtu atbilstību. Rezultātā mums katram vārdam ir jāraksta divas Sed instrukcijas, tāpēc tas atpazīst lielo un nekapitālo versiju.
Tas nedarbosies lieliski, it kā jūs ar roku būtu aizstājuši katru “Es”, “Es” un “Mans” gadījumu. Atcerieties, ka mēs to izmantojam tikai kā vingrinājumu, lai parādītu, kā jūs varat grupēt Sed instrukcijas vienā skriptā un pēc tam izpildīt tās ar vienu komandu.
Pēc tam mums ir jāizsauc fails. Lai to izdarītu, mēs palaižam šo komandu.
kaķis tom.txt | sed -f greg.sed
Palēnināsim ātrumu un paskatīsimies, kā tas notiek. Eagle-acu lasītāji būs pamanījuši, kādi mēs esam nē izmantojot Echo šeit. Mēs izmantojam Cat. Tas ir tāpēc, ka, kamēr Kaķis izdrukās visu faila saturu, echo izdrukās tikai faila nosaukumu. Jūs arī pamanījāt, ka mēs braucam ar Sed ar “-f” karogu. Tas liek atvērt skriptu kā failu.
Gala rezultāts ir šāds.
Ir arī vērts atzīmēt, ka Seds atbalsta regulārās izteiksmes (REGEX). Tie ļauj jums noteikt modeļus tekstā, izmantojot īpašu un sarežģītu sintakse.
Šis ir piemērs, kā tas varētu darboties. Mēs izmantosim iepriekšminētos dziesmu tekstus, taču, lai izdrukātu katru rindiņu, izmantojiet regex nav sāciet ar “Veikt”.
kaķis tom.txt | sed / ^ Ņem / d
Seds, protams, ir neticami noderīgs. Bet tas ir vēl jaudīgāks, ja to apvieno ar Awk.
Kas ir Awk?
Awk, tāpat kā Sed, ir programmēšanas valoda, kas paredzēta lielu teksta daļu apstrādei. Bet, lai gan Sed tiek izmantots teksta apstrādei un modificēšanai, Awk galvenokārt tiek izmantots kā rīks analīze un ziņošana.
Tāpat kā Seds, arī Awk pirmo reizi tika izstrādāts Bell Labs 70. gados. Tās nosaukums nav cēlies no programmas dara, bet drīzāk katra autora - Alfrēda Aho, Pētera Veinbergera un Braiena Kernagana uzvārdi.
Awk darbojas, lasot teksta failu vai ievades straumi vienā rindā vienlaikus. Katra rinda tiek skenēta, lai redzētu, vai tā atbilst iepriekš noteiktam modelim. Ja tiek atrasta atbilstība, tiek veikta darbība.
Kaut arī Sed un Awk var būt līdzīgi mērķi, tās ir divas pilnīgi atšķirīgas valodas ar divām pilnīgi atšķirīgām dizaina filozofijām. Awk vairāk atgādina dažus vispārējas nozīmes valodas Kā izvēlēties programmēšanas valodu, lai šodien apgūtu un iegūtu lielisku darbu 2 gadu laikāLai kļūtu par patiesi labu programmētāju, var paiet daudz gadu veltīta darba; Tātad, vai ir veids, kā izvēlēties pareizo valodu, sākot ar šodienu, lai pieņemtu darbā rīt? Lasīt vairāk , piemēram, C, Python un Bash. Tam ir tādas funkcijas kā funkcijas un vairāk C veida pieeja lietām, piemēram, iterācijai un mainīgajiem (James Bruce paskaidroja, kā darbojas iterācija Programmēšanas absolūtie pamati iesācējiem (2. daļa)Mūsu absolūtā programmēšanas rokasgrāmata iesācējiem 2. daļā es apskatīšu funkciju pamatus, atgriešanās vērtības, cilpas un nosacījumus. Pārliecinieties, ka esat lasījis 1. daļu, pirms sākat to risināt, kur es paskaidroju ... Lasīt vairāk ). Vienkārši sakot, tas drīzāk šķiet kā programmēšanas valoda.
Tātad, izmēģināsim to. Izmantojot dziesmas Take On Me dziesmu tekstus, mēs izdrukāsim visas rindas, kas garākas par 20 rakstzīmēm.
awk 'garums (0 USD)> 80' tom.txt
Nākamais piemērs nekaunīgi cribbed no plkst oficiālo Awk dokumentāciju. Bet tas ir lielisks piemērs šīs spēcīgās, tomēr niecīgās valodas potenciālam. Tas ir arī lielisks piemērs tam, kā itāzijas un mainīgie darbojas tajā. Vispirms izveidojiet failu ar nosaukumu “WordCount.awk” un pievienojiet šādas rindas.
{par (i = 1; i <= NF; i ++) biežums [$ i] ++ }
END {for (vārds frekvencē) printf "% s \ t% d \ n", vārds, frekvence [vārds] }
Saglabājiet to un palaidiet to, izmantojot šo komandu.
awk -f WordCount.awk tom.txt
Forši, vai ne? Jūs droši vien pamanīsit, ka viņi nav nekādā kārtībā. Jūs var kārtojiet rezultātus, izmantojot Unix kārtošanas utilītu. Bet mēs to atstāsim uz citu dienu. Mēs to visu padarīsim vienkāršu.
Apvienojot divus
Awk un Sed abi apvienojumā ir neticami jaudīgi. To var izdarīt, izmantojot Unix caurules. Tie ir “|” biti starp komandām.
Mēģināsim izmēģināt šo: izmantojot Awk, mēs uzskaitīsim visas līnijas Take On Me rindiņas, kurās ir vairāk nekā 20 rakstzīmes. Tad mēs noņemsim visas līnijas, kas sākas ar “Ņem”. Kopā tas viss izskatās šādi:
awk 'garums ($ 0)> 20' tom.txt | sed / ^ Ņem / d
Un ražo šo:
Tagad apskatīsim to apkārt. Sākumā noņemsim visas rindiņas, kas sākas ar Ņemt, un pēc tam nosūtīsim tās uz Awk, kur mēs uzskaitīsim, cik reizes katrs vārds tiek parādīts. Tas izskatās mazliet šādi:
kaķis tom.txt | sed / ^ Ņem / d | awk -f WordCount.awk
Sed un Awk spēks
Vienā rakstā var izskaidrot tikai tik daudz. Bet es ceru, ka esmu parādījis, cik neizmērojami spēcīgi ir Seds un Awks. Vienkārši sakot, tie ir teksta apstrādes spēks.
Tātad, kāpēc jums vajadzētu rūpēties? Bez fakta, ka jūs nekad nezināt, kad jums būs jāveic paredzamas, atkārtotas teksta dokumenta izmaiņas, Sed un Awk ir lieliski piemēroti žurnālfailu parsēšanai. Tas ir īpaši ērti, ja mēģināt atkļūdot problēmu jūsu LAMP serverī Vai esat reģistrējies tikai SSH tīmekļa mitināšanai? Neuztraucieties - viegli instalējiet jebkuru Web programmatūruVai nezināt pirmo lietu par operētājsistēmas Linux darbību, izmantojot jaudīgo komandrindu? Neuztraucieties vairs. Lasīt vairāk vai apskatot piekļuves žurnālus, lai redzētu, vai serverim nav uzlauzts.
Vai esat atradis interesantu lietojumu Sed un Awk? Vai ir kādas citas Linux utilītas, kuras, jūsuprāt, nenovērtē? Paziņojiet man par to komentāros zemāk, un mēs tērzēsim.
Metjū Hjūss ir programmatūras izstrādātājs un rakstnieks no Liverpūles, Anglijas. Viņš reti atrodams bez tasītes spēcīgas melnas kafijas rokā un absolūti dievina savu Macbook Pro un kameru. Jūs varat lasīt viņa emuāru vietnē http://www.matthewhughes.co.uk un seko viņam līdzi twitter vietnē @matthewhughes.