Si të modifikoni tekstin duke përdorur shprehje të rregullta me redaktuesin sed Stream


Çdo përdorues kompjuteri në botë herët a vonë do të modifikojë një varg teksti - manualisht ose automatikisht. Prezantohuni me redaktorin e transmetimit sed, i cili ju mundëson të bëni modifikime teksti në masë në vargjet dhe skedarët.

Shprehje të rregullta në vijën e komandës

Redaktori i transmetimit sed, një mjet i disponueshëm si parazgjedhje në shumë shpërndarje Linux, ju mundëson të analizoni dhe transformoni tekstin në një mënyrë të lehtë dhe të drejtpërdrejtë, pavarësisht nëse teksti i tillë është brenda skedarëve, ose thjesht vargje të thjeshta në vijën e komandës. Ju gjithashtu mund të analizoni listat e drejtorive, daljen e listimit të procesit dhe shumicën e llojeve të tjera të informacionit që mund të rrjedhin brenda ose jashtë sesionit tuaj të terminalit.

Për të verifikuar nëse sed është i disponueshëm në shpërndarjen tuaj Linux, shkruani sed --version në vijën e komandës:

Mos u shqetësoni nëse versioni juaj është pak më i vjetër se ai i paraqitur këtu. Do të jetë pothuajse padyshim mirë për shembujt që diskutojmë këtu. Nëse mjeti nuk është i disponueshëm në shpërndarjen tuaj, mund ta instaloni duke përdorur sudo apt install sed për sistemet operative të bazuara në Ubuntu/Debian, ose sudo yum install sed për RedHat/RPM sisteme operative të bazuara.

sed aplikon një transformim të vogël teksti duke përdorur atë që quhet RegEx ose shprehje e rregullt. Një shprehje e rregullt është një formë dhe metodë për të shprehur kërkimin më kompleks të bazuar në tekst, zëvendësimin dhe modifikimin e operacioneve në një format ende të lexueshëm nga njeriu. Shprehjet e rregullta janë të ndërlikuara dhe mund të jenë të vështira për t'u lexuar për fillestarët. Ju mund të lexoni udhëzuesin tonë, Si e përdorni në të vërtetë Regex, për më shumë informacion se si të lexoni dhe shkruani Regex.

Për qëllimin e këtij artikulli, ne do të qëndrojmë me shprehje të rregullta të lehta për t'u kuptuar dhe lexuar. Për shembull, më poshtë është një zëvendësim i thjeshtë:

Siç mund ta shihni, ne i bëmë jehonë një pjese të vogël teksti dhe më pas e transformuam atë duke përdorur mjetin sed. Ne përdorëm përdorimin e komandës 's' (zëvendësues) sed dhe treguam se çfarë donim të ndryshonim. Ju mund ta lexoni këtë në një mënyrë tjetër si s|nga|në| ku '|' është ndarësi ndërmjet seksioneve/fushave, 's' është komanda dhe 'nga' dhe 'to' janë të dyja opsionet i kaluan komandës 's'.

Kështu, ne e transformuam Hello Cloud Savvy IT fans! në Përshëndetje fansa të cloudsavvyit.com! duke ndryshuar vetëm një pjesë të tekstit duke përdorur redaktuesin e transmetimit sed. Le të marrim një shembull pak më kompleks.

Këtu ne fillimisht krijojmë një skedar me 3 rreshta duke përdorur komandën echo me ridrejtim në një skedar ('>' krijon një skedar të ri, duke mbishkruar një skedar me të njëjtin emër nëse ekziston, dhe '>>' i shtohet një skedari pa e modifikuar ndryshe). Më pas shfaqëm përmbajtjen e skedarit duke përdorur komandën cat.

Më pas e transformuam përmbajtjen e skedarit me mjetin sed drejtpërdrejt. Për ta bërë këtë, ne përcaktuam opsionin '-i' për të sed i cili redakton skedarin në vend. Udhëzimi aktual i transformimit tekstual është i njëjtë si më parë. Dhe së fundi ne specifikojmë emrin e skedarit në fund të komandës. Më pas kontrollojmë përmbajtjen e skedarit dhe vërejmë se si ka ndryshuar inputi ynë.

Siç mund të filloni të shihni, ose tashmë e dini nga përvoja e kaluar, ka shumë fuqi në dispozicion në mjetin sed.

Le t'i shijojmë gjërat pak duke zgjeruar shprehjen tonë të rregullt dhe metodën e shkrimit të udhëzimit të transformimit të tekstit sed:

Në këtë shembull, ne zëvendësuam shkronjën 'h' me '_H' dhe e bëmë këtë në një mënyrë globale (vini re kualifikuesin 'g' afër fundit të udhëzimit të parë të kaluar në sed) dhe në mënyrë të pandjeshme ndaj shkronjave (vini re 'i' kualifikues gjithashtu afër fundit të udhëzimit të parë). h përputhet edhe pse skedari përmban H për shkak të kualifikuesit i.

Më pas filluam një udhëzim të ri (udhëzimet përfundojnë/përfundojnë me ; njëlloj si shumë gjuhë të tjera koduese) në të cilin fshimë .com duke e kërkuar në thelb dhe duke e zëvendësuar me asgjë.

Vini re gjithashtu se si kemi përdorur ndarës të ndryshëm të opsioneve të fushave/komandave. Në shembullin e parë ne përdorëm '|' i cili në përgjithësi është një ndarës fushash i lehtë për t'u përdorur dhe mjaft i pazakontë. Shumë njerëz përdorin '/' edhe pse kjo mund të çojë në probleme kur analizoni emrat e shtigjeve të cilat shpesh përmbajnë '/'.

Të qenit në gjendje të përdorni ndarës të ndryshëm të opsioneve të fushave/komandave ju mundëson të përdorni lehtësisht një ndarës tjetër nëse vargu juaj i tekstit në fakt përmban ose ka të ngjarë të përmbajë një karakter specifik.

Duke përdorur sed With Files

Le të shqyrtojmë një shembull tjetër të bazuar në sed ku do të injektojmë tekst në një skedar:

Në këtë shembull, ne krijuam një skedar me 5 rreshta dhe më pas përdorëm një udhëzim pak kompleks sed për të injektuar një ndarës '—' pas çdo rreshti të dytë. Ndërsa sintaksa kryesisht shpjegon vetveten, është interesante të theksohet se komanda 'r' (lexo/shtoj tekstin nga një skedar) specifikon emrin e skedarit të injektuar drejtpërdrejt dhe ndërkohë që është ende brenda udhëzimit kryesor, pa asnjë ndarës.

Ju gjithashtu mund të filloni të shihni se, përveç mësimit të një sintakse të shprehjes së rregullt, është e dobishme të mësoni sintaksën sed në thellësi. Është pothuajse si të mësosh dy gjuhë të reja të huaja, por përfitimi është se sintaksa sed mund të rritet me nevojën tuaj për kompleksitet shtesë.

Le të shqyrtojmë një shembull ku zëvendësojmë një zonë të veçantë teksti me diçka tjetër:

Në këtë shembull, ne kërkojmë tekstin '3' dhe për atë rresht do të zëvendësojmë 'C' me 'Z'. Ju e shihni se sa i gjithanshëm mund të jetë sed.

Më në fund, mund të shikojmë analizimin e llojeve të tjera të hyrjes:

Siç mund ta shihni, ne krijuam 3 skedarë dhe kërkuam një listë të drejtorive duke përdorur komandën ls. Më pas e morëm atë dalje si hyrje në sed (duke përdorur komandën e tubit Linux, '|') dhe transformuam një pjesë të listës së drejtorisë tonë në një nënvizim.

Redaktori i transmetimit sed është një mjet i gjithanshëm që mund t'ju ndihmojë të analizoni dhe transformoni pothuajse çdo tekst drejtpërdrejt nga linja e komandës së terminalit, pavarësisht nëse hyrja vjen nga një deklaratë e thjeshtë echo, mjete të tjera Linux ose nga një banesë skedar teksti. Kënaqu!