Konkrét sorok törlése egy fájlból sed használatával

Előfordulhat, hogy egy vagy több fájlból el kell távolítanunk egy adott sort. Például van egy egész fájllistám, és mindegyikből el kell távolítanom a 27. sort (a 27. sor egy ACL, szabály, konfiguráció). Szerkeszthetem fájlonként, vagy egyszerűen elérhetem, amit kell, a sed parancs és egy bash szkript (opcionális) használatával.

De próbálkozzunk egy egyszerű fájllal.

Van egy distros-deb.txt fájlunk , ami ezt tartalmazza:

debian

ubuntu

archlinux

solusok

menta

Más szóval, a distros-deb.txt fájlban fogjuk felsorolni a Debian-alapú disztribúciókat, de látjuk, hogy a 3. sor az "archlinux" szót tartalmazza, egy olyan disztribúciót, amelynek nyilvánvalóan semmi köze a Debianhoz, ezért el kell távolítanunk ezt a sort. A 3. sor eltávolításához a fájlból a következőket kell hozzáadnunk:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Ennek a sornak a magyarázata egyszerű: a `sed "3d"` paranccsal azt jelezzük, hogy a 3. sort töröljük, a `distros-deb.txt` paranccsal pedig azt, hogy melyik fájlon dolgozzon, azaz törölje a fájl 3. sorát. Eddig a pontig, ha megnyomjuk az `<kbd>Enter</kbd>` billentyűt, akkor a terminálban mutatja meg, amit akarunk, tehát a `> distros-deb-ok.txt` paranccsal azt jelezzük, hogy a terminál helyett egy ilyen nevű fájlba kell tennie az eredményt.

Mi az egyszerű?

A > distros-deb-ok.txt használatát elkerülhetjük egy sed paraméter , az -i paraméter használatával is.

Más szóval, ha el akarjuk távolítani a sort a fájlból, és ugyanazzal a névvel akarjuk menteni (és nem egy másik fájlba), egyszerűen hozzá kell adnunk az -i paramétert :

sed -i "3d" distros-deb.txt

Ez eltávolítja a 3. sort a distros-deb.txt fájlból és elmenti.

Mi van, ha egy sor tartományt szeretnék, vagyis a # 3, de a # 4 és az # 5 sor eltávolítását is? Ennek elérése érdekében a 3 és 5 közötti tartományt tesszük, vagyis:

sed -i "3,5d" distros-deb.txt

És csak a debiant és a kubuntut fogja mutatni 

Tehát mi van, ha törölni akarok a 2. sorból az utolsóba, amikor nem ismerem a teljes sort?

Csak használja a dollár szimbólumot - »$

sed -i "2,$d" distros-deb.txt

Abban az esetben, ha ki akarsz küszöbölni az első sorból a # 4-be, akkor egyszerűen az 1 értéket tesszük az elejére:

sed -i "1,4d" distros-deb.txt

Nagyjából ennyi, egy elég hasznos tipp, ha bash szkripteket szeretnél írni feladatok automatizálásához, és módosítani, illetve törölni kell a konfigurációs fájlok sorait. A módosításhoz használhatjuk a sed vagy a perl parancsot, a törléshez pedig már tudjuk, hogyan kell a sed parancsot használni.

Üdvözlet


Hozzáadás előnyben részesített forrásként a Google-ben