15 koristnih nasvetov in trikov za ukaze za vsakodnevna sistemska opravila sistema Linux


Vsak sistemski skrbnik se mora vsak dan ukvarjati z navadnimi besedilnimi datotekami. Vedeti si, kako si ogledate določene razdelke, kako nadomestiti besede in kako filtrirati vsebino iz teh datotek, so veščine, ki jih morate imeti pri roki, ne da bi morali iskati v Googlu.

V tem članku bomo pregledali sed, dobro znani urejevalnik tokov, in delili 15 nasvetov za njegovo uporabo za doseganje prej omenjenih ciljev in še več.

1. Ogled obsega vrstic dokumenta

Orodja, kot sta glava in rep, nam omogočajo ogled spodnjega ali zgornjega dela datoteke. Kaj če si moramo ogledati odsek na sredini? Naslednja sed ena linija bo vrnila vrstice od 5 do 10 iz myfile.txt:

# sed -n '5,10p' myfile.txt

2. Ogled celotne datoteke, razen določenega obsega

Po drugi strani pa je mogoče, da želite natisniti celotno datoteko, razen določenega obsega. Če želite iz datoteke myfile.txt izključiti vrstice od 20 do 35, naredite:

# sed '20,35d' myfile.txt

3. Ogled nesporednih vrstic in obsegov

Možno je, da vas zanima niz zaporednih vrstic ali več kot en obseg. Pokažimo vrstice 5-7 in 10-13 iz myfile.txt:

# sed -n -e '5,7p' -e '10,13p' myfile.txt

Kot lahko vidite, nam možnost -e omogoča izvedbo določenega dejanja (v tem primeru vrstice za tiskanje) za vsak obseg.

4. Zamenjava besed ali znakov (osnovna zamenjava)

Če želite v myfile.txt zamenjati vsak primerek besede version z story , naredite:

# sed 's/version/story/g' myfile.txt

Poleg tega boste morda želeli razmisliti o uporabi gi namesto g , da boste prezrli velike in male črke:

# sed 's/version/story/gi' myfile.txt

Če želite več praznih presledkov nadomestiti z enim presledkom, bomo uporabili izhodne podatke ip route show in cevovod:

# ip route show | sed 's/  */ /g'

Primerjajte izhodne podatke ip route show z in brez cevovoda:

5. Zamenjava besed ali znakov znotraj obsega

Če vas zanima zamenjava besed samo znotraj obsega vrstic (na primer od 30 do 40), lahko storite:

# sed '30,40 s/version/story/g' myfile.txt

Seveda lahko namesto obsega označite eno vrstico prek ustrezne številke.

6. Uporaba regularnih izrazov (napredna zamenjava) - I

Včasih so konfiguracijske datoteke naložene s komentarji. Čeprav je to vsekakor koristno, je morda včasih koristno prikazati samo konfiguracijske direktive, če si želite vse na hitro ogledati.

Če želite odstraniti prazne vrstice ali vrstice, ki se začnejo z # , iz konfiguracijske datoteke Apache:

# sed '/^#\|^$\| *#/d' httpd.conf

Znak za zaporedje, ki mu sledi številčni znak (^#) , označuje začetek vrstice, ^$ pa prazne vrstice. Navpične črte označujejo logične operacije, medtem ko se poševnica nazaj uporablja za pobeg navpičnih vrstic.

V tem posebnem primeru ima konfiguracijska datoteka Apache vrstice z # s , ki niso na začetku nekaterih vrstic, zato se tudi * # uporablja za njihovo odstranitev.

7. Uporaba regularnih izrazov (napredna zamenjava) - II

Za zamenjavo besede, ki se začne z veliko ali malo, z drugo besedo, lahko uporabimo tudi sed. Za ponazoritev zamenjajmo besedo zip ali Zip z rar v myfile.txt:

# sed 's/[Zz]ip/rar/g' myfile.txt

8. Ogled vrstic, ki vsebujejo dani vzorec

Druga uporaba sed je sestavljena iz tiskanja vrstic iz datoteke, ki se ujemajo z danim regularnim izrazom. Na primer, morda nas zanima ogled dejavnosti avtorizacije in preverjanja pristnosti, ki so potekale 2. julija v skladu z/var/log/secure log v strežniku CentOS 7.

V tem primeru je vzorec za iskanje 2. julij na začetku vsake vrstice:

# sed -n '/^Jul  1/ p' /var/log/secure

9. Vstavljanje presledkov v datoteke

S sed lahko vstavimo tudi presledke (prazne vrstice) za vsako prazno vrstico v datoteki. Če želite vstaviti po eno prazno vrstico v vsako drugo vrstico v LICENCA, navadno besedilno datoteko:

# sed G myfile.txt

Če želite vstaviti dve prazni vrstici:

# sed 'G;G' myfile.txt

Če želite dodati več praznih vrstic, dodajte veliko črko G, ločeno s podpičjem. Naslednja slika prikazuje primer, opisan v tem nasvetu:

Ta nasvet vam lahko pride prav, če želite pregledati veliko konfiguracijsko datoteko. Če vstavite prazen prostor v vsako drugo vrstico in izhodne podatke usmerite v manj, bo bralno doživetje prijaznejše.

10. Posnemanje dos2unix z vrstico za urejanje

Program dos2unix pretvori navadne besedilne datoteke iz formatiranja Windows/Mac v Unix/Linux in odstrani skrite znake nove vrstice, ki jih vstavijo nekateri urejevalniki besedil, ki se uporabljajo na teh platformah. Če ni nameščen v vašem sistemu Linux, lahko posnamete njegovo funkcionalnost s sed, namesto da ga namestite.

Na sliki na levi strani lahko vidimo več znakov za novo vrstico DOS (^M) , ki so bili pozneje odstranjeni z:

# sed -i 's/\r//' myfile.txt

Opomba -i označuje urejanje na mestu. Nato spremembe ne bodo vrnjene na zaslon, temveč bodo shranjene v datoteko.

Opomba: Med urejanjem datoteke v urejevalniku datotek v urejevalniku vim lahko vstavite znake nove vrstice DOS z Ctrl + V in Ctrl + M .

11. Urejanje in varnostno kopiranje izvirne datoteke na mestu

V prejšnjem nasvetu smo za spreminjanje datoteke uporabili sed, originalne datoteke pa nismo shranili. Včasih je dobro shraniti varnostno kopijo izvirne datoteke za vsak slučaj.

Če želite to narediti, navedite pripono po možnosti -i (znotraj enojnih narekovajev), ki bo uporabljena za preimenovanje izvirne datoteke.

V naslednjem primeru bomo v Myfile.txt zamenjali vse primere tega ali tega (ne upoštevajoč primera) s tistim, izvirno datoteko pa bomo shranili kot myfile.txt.orig.

Na koncu bomo z orodjem diff prepoznali razlike med obema datotekama:

# sed -i'.orig' 's/this/that/gi' myfile.txt

12. Preklapljanje parov besed

Recimo, da imate datoteko s polnimi imeni v obliki Ime, Priimek. Če želite ustrezno obdelati datoteko, boste morda želeli zamenjati Priimek in Ime.

To lahko storimo s sed precej enostavno:

# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

Na zgornji sliki lahko vidimo, da je treba oklepaje, ki so posebni znaki, ubežati, prav tako številki 1 in 2.

Te številke predstavljajo označene regularne izraze (ki morajo biti v oklepajih):

  1. 1 predstavlja začetek vsake vrstice do vejice.
  2. 2 je ograda za vse, kar je desno od vejice do konca vrstice.

Želeni izhod je naveden v obliki SecondColumn (Priimek) + vejica + presledek + FirstColumn (Ime). Lahko ga spremenite v karkoli želite.

13. Zamenjava besed samo, če je bilo ugotovljeno ločeno ujemanje

Včasih zamenjava vseh primerov dane besede ali nekaj naključnih ni ravno tisto, kar potrebujemo. Morda bomo morali opraviti zamenjavo, če bomo našli ločeno ujemanje.

Na primer, morda želimo zamenjati start s stop le, če je beseda storitve v isti vrstici. V tem primeru se bo zgodilo naslednje:

We need to start partying at work,
but let’s remember to start all services first.

V prvi vrstici start ne bo nadomeščen s stop, saj se beseda storitve v tej vrstici ne pojavi v nasprotju z drugo vrstico.

# sed '/services/ s/start/stop/g' msg.txt

14. Izvedba dveh ali več zamenjav hkrati

Lahko kombinirate dve ali več zamenjav z enim samim ukazom sed. Zamenjajmo besede that in line v myfile.txt s This oziroma verz.

Upoštevajte, kako je to mogoče storiti z običajnim ukazom za zamenjavo sed, ki mu sledi podpičje in drugi nadomestek:

# sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Ta nasvet je ponazorjen na naslednji sliki:

15. Kombiniranje sed in drugih ukazov

Seveda lahko sed kombiniramo z drugimi orodji za ustvarjanje močnejših ukazov. Na primer, uporabimo primer iz TIP # 4 in iz izhoda ukaza ip route izluščimo naš naslov IP.

Začeli bomo s tiskanjem samo vrstice, kjer je beseda src . Nato bomo več presledkov pretvorili v enega. Na koncu bomo izrezali 9. polje (upoštevajoč en presledek kot ločilo polja), kjer je naslov IP:

# ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

Spodnja slika prikazuje vsak korak zgornjega ukaza:

Povzetek

V tem priročniku smo delili 15 nasvetov in trikov, ki vam bodo pomagali pri vsakodnevnih sistemskih nalogah. Ali obstaja kakšen drug namig, ki ga redno uporabljate in bi ga radi delili z nami in ostalo skupnostjo?

V tem primeru nam to sporočite s pomočjo spodnjega obrazca za komentar. Tudi vprašanja in komentarji so dobrodošli - veselimo se vaših odzivov!