Weboldal keresés

15 Sed parancs tipp Linux rendszeradminisztrációs feladatokhoz


Minden rendszergazdának napi rendszerességgel kell foglalkoznia egyszerű szöveges fájlokkal. Az egyes szakaszok megtekintésének, a szavak cseréjének és a tartalom kiszűrésének ismerete olyan készségek, amelyek kéznél vannak anélkül, hogy Google-keresést kellene végezniük.

Ebben a cikkben áttekintjük a sed-et, a jól ismert adatfolyam-szerkesztőt, és megosztunk 15 tippet a használatához a korábban említett célok eléréséhez és még sok máshoz.

Mi az a Sed Command?

A 'sed' parancs (az adatfolyamszerkesztő rövidítése) egy sokoldalú és hatékony szövegszerkesztő eszköz, amely szövegfolyamokon működik, és lehetővé teszi a felhasználók számára, hogy különféle műveleteket hajtsanak végre az adatokon, például keresést, cserét, beszúrást és töröl. A „Sed” reguláris kifejezéseket használ a szövegmanipuláció mintáinak meghatározására, és kötegelt szerkesztési feladatokhoz és szkriptekben történő szövegfeldolgozáshoz használható.

Az egyik figyelemre méltó funkciója a helyben történő szerkesztés, ahol közvetlenül módosíthatja a fájlokat, vagy biztonsági másolatot készíthet a változtatások végrehajtása közben. A „Sed” alapvető eszköz a rendszergazdák, programozók és bárki számára, aki szövegátalakítási és adatkezelési feladatokkal foglalkozik a parancssorban.

Az alábbiakban néhány gyakori „sed” parancs látható példákkal:

1. Egy fájl sorainak tartományának megtekintése

Az olyan eszközök, mint a fej és a farok, lehetővé teszik a fájl aljának vagy tetejének megtekintését. Mi van, ha meg kell néznünk egy részt a közepén? A következő sed egysoros az 5 és 10 sorokat adja vissza a tecmint.txt fájlból:

sed -n '5,10p' tecmint.txt

2. A teljes fájl megtekintése egy adott tartomány kivételével

Másrészt előfordulhat, hogy egy bizonyos tartomány kivételével a teljes fájlt ki szeretné nyomtatni. A 20 és 35 sorok kizárásához a tecmint.txt fájlból, tegye a következőket:

sed '20,35d' myfile.txt

3. Nem egymást követő vonalak és tartományok megtekintése

Lehetséges, hogy nem egymást követő sorok, vagy egynél több tartomány érdekli. Jelentsük meg az 5-7 és a 10-13 sorokat a tecmint.txt fájlból:

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

Amint látja, a -e opció lehetővé teszi, hogy egy adott műveletet hajtsunk végre (jelen esetben sorokat nyomtassunk) minden tartományban.

4. Szavak vagy karakterláncok cseréje egy fájlban

Ha a version szó minden példányát a story szóra szeretné cserélni a tecmint.txt fájlban, tegye a következőket:

sed 's/version/story/g' tecmint.txt

Ezenkívül érdemes megfontolni a gi használatát a g helyett, hogy figyelmen kívül hagyja a kis- és nagybetűket:

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

Több üres szóköz egyetlen szóközzel való helyettesítéséhez az ip route show parancs kimenetét használjuk egy folyamattal:

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

Hasonlítsa össze az ip route show kimenetét a folyamattal és anélkül:

5. Szavak vagy karakterláncok cseréje tartományon belül

Ha csak egy sor (például 30 és 40) közötti szavakat szeretne lecserélni, akkor tegye a következőket:

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

Természetesen tartomány helyett egyetlen sort is megadhat a hozzá tartozó számon keresztül.

6. Megjegyzések eltávolítása egy fájlból

Néha a konfigurációs fájlok megjegyzésekkel töltődnek be. Bár ez minden bizonnyal hasznos, hasznos lehet, ha néha csak a konfigurációs direktívákat jeleníti meg, ha egy pillantással meg szeretné tekinteni az összeset.

Az üres vagy a # karakterrel kezdődő sorok eltávolításához az Apache konfigurációs fájlból:

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

A mutatójelet a (^#) számjel követi, amely egy sor elejét jelzi, míg a ^$ üres sorokat jelöl. A függőleges sávok a logikai műveleteket jelzik, míg a visszafelé perjel a függőleges sávok elkerülésére szolgál.

Ebben az esetben az Apache konfigurációs fájljában olyan sorok találhatók, amelyekben a # kód nem található néhány sor elején, ezért a *# használatával ezek is eltávolításra kerülnek.

7. Cserélje ki a kis- és nagybetűket nem érzékeny szót a fájlban

Ha egy nagybetűvel vagy kisbetűvel kezdődő szót egy másik szóra szeretne cserélni, használhatjuk a sed-et is. Szemléltetésképpen cseréljük ki a zip vagy a Zip szót a rar szóra a tecmint.txt fájlban:

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

8. Adott események keresése egy naplófájlban

A sed másik használata abból áll, hogy egy fájlból kinyomtatja azokat a sorokat, amelyek megfelelnek egy adott reguláris kifejezésnek. Például érdekelhet bennünket az engedélyezési és hitelesítési tevékenységek, amelyekre július 2-án került sor, a /var szerint. /log/secure jelentkezzen be egy CentOS szerverre.

Ebben az esetben a keresendő minta július 2. az egyes sorok elején:

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

9. Szóközök vagy üres sorok beszúrása egy fájlba

A sed segítségével szóközt (üres sorokat) is beszúrhatunk a fájl minden nem üres sorába. Ha egy üres sort szeretne beszúrni minden második sorba a LICENSE egyszerű szöveges fájlba, tegye a következőket:

sed G tecmint.txt

Két üres sor beszúrásához tegye a következőket:

sed 'G;G' tecmint.txt

Ha további üres sorokat szeretne hozzáadni, írjon be egy nagybetűs G betűt pontosvesszővel elválasztva. A következő kép az ebben a tippben felvázolt példát szemlélteti:

Ez a tipp hasznos lehet, ha nagy konfigurációs fájlt szeretne megvizsgálni. Ha minden második sorban üres helyet szúr be, és a kimenetet kisebbre állítja, barátságosabb olvasási élményt fog eredményezni.

10. ^M eltávolítása egy fájlból

A dos2unix program az egyszerű szöveges fájlokat Windows/Mac formázásból Unix/Linux formátumba konvertálja, eltávolítva az ezeken a platformokon használt szövegszerkesztők által beszúrt rejtett újsor karaktereket. Ha nincs telepítve a Linux rendszerére, a telepítés helyett a sed segítségével utánozhatja a működését.

A bal oldali képen számos (^M) DOS újsor karaktert láthatunk, amelyeket később eltávolítottunk:

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

Kérjük, vegye figyelembe, hogy a -i opció a helyben történő szerkesztést jelzi. Ekkor a változtatások nem jelennek meg a képernyőn, hanem a fájlba kerülnek.

Megjegyzés: DOS újsor karaktereket szúrhat be, miközben egy fájlt szerkeszt a Vim szerkesztőben a Ctrl+V és Ctrl+M billentyűkombinációval.

11. Hozzon létre egy biztonsági mentési fájlt a Sed paranccsal

Az előző tippben a sed használatával módosítottunk egy fájlt, de nem mentettük az eredeti fájlt. Néha érdemes menteni egy biztonsági másolatot az eredeti fájlról minden esetre.

Ehhez adjon meg egy utótagot a -i opció után (egy idézőjelben), amelyet az eredeti fájl átnevezéséhez használ.

A következő példában a ezt vagy a This (a kis- és nagybetűk figyelmen kívül hagyása) minden előfordulását lecseréljük a sajatfájl.txt fájlban lévőre, és elmentjük az eredeti fájlt myfile.txt.orig néven.

Végül a diff segédprogramot használjuk a két fájl közötti különbségek azonosítására:

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

12. Szópárok váltása egy fájlban

Tegyük fel, hogy van egy fájlja, amely teljes neveket tartalmaz Utónév, Vezetéknév formátumban. A fájl megfelelő feldolgozásához érdemes váltani a Vezetéknév és a Utónév között.

Ezt a sed segítségével meglehetősen egyszerűen megtehetjük:

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

A fenti képen láthatjuk, hogy a zárójeleket, mivel speciális karakterek, meg kell szökni, csakúgy, mint az 1 és 2 számokat.

Ezek a számok a kiemelt reguláris kifejezéseket jelentik (amelyeknek zárójelben kell megjelenniük):

  • Az 1 minden sor elejét jelöli a vesszőig.
  • A 2 egy helyőrző mindenre, ami a sor végén lévő vessző után következik.

A kívánt kimenet a következő formátumban jelenik meg: Második oszlop (Vezetéknév) + vessző + szóköz + Első oszlop (Utónév). Nyugodtan változtassa meg, amire csak akarja.

13. Szavak cseréje Csak akkor, ha külön egyezés található

Néha egy adott szó összes előfordulásának vagy néhány véletlenszerű előfordulásának lecserélése nem pontosan az, amire szükségünk van. Lehet, hogy végre kell hajtanunk a cserét, ha találunk külön egyezést.

Előfordulhat például, hogy a start szót csak akkor cseréljük le a stop-ra, ha a szolgáltatások szó ugyanabban a sorban található. Ebben a forgatókönyvben a következő történik:

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

Az első sorban a start nem cserélődik le a stopra, mivel a szolgáltatások szó nem jelenik meg ebben a sorban, szemben a második sorral.

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

14. Két vagy több csere végrehajtása egyszerre

Két vagy több helyettesítést kombinálhat egyetlen sed parancsban. Cseréljük le a myfile.txt fájlban szereplő that és sort a This és a verse szavakra.

Jegyezze meg, hogyan teheti ezt meg egy közönséges sed helyettesítési parancs használatával, amelyet pontosvessző és egy második helyettesítési parancs követ:

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

Ezt a tippet a következő kép szemlélteti:

15. Sed és egyéb parancsok kombinálása

Természetesen a sed kombinálható más Linux-parancsokkal, hogy erősebb parancsokat hozzon létre. Például használjuk a 4. TIPPben megadott példát, és vegyük ki az IP-címünket az ip route parancs kimenetéből.

Kezdjük azzal, hogy csak azt a sort nyomtatjuk ki, ahol az src szó található. Ezután több szóközt egyetlen szóközvé alakítunk. Végül kivágjuk a 9. mezőt (egy szóközt tekintve mezőelválasztónak), ahol az IP-cím található:

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

Az alábbi kép a fenti parancs minden lépését szemlélteti:

Összegzés

Ebben az útmutatóban megosztottunk 15 sed tippet és trükköt, amelyek segítik a napi rendszeradminisztrációs feladatokat. Van más tipp, amit rendszeresen használsz, és szeretnél megosztani velünk és a közösség többi tagjával?

Ha igen, nyugodtan tudassa velünk az alábbi megjegyzés űrlap segítségével. Kérdéseket és észrevételeket is szívesen fogadunk – szeretettel várjuk!