Jak usunąć określone linie z pliku za pomocą seda

Czasami musimy usunąć konkretny wiersz z jednego lub kilku plików. Na przykład, mam całą listę plików i muszę usunąć wiersz nr 27 ze wszystkich (wiersz nr 27 to lista ACL, reguła, konfiguracja). Mogę edytować plik po pliku lub po prostu uzyskać to, czego potrzebuję, używając polecenia sed i skryptu bash (opcjonalnie).

Ale spróbujmy trochę prostego pojedynczego pliku.

Mamy plik distros-deb.txt , który zawiera następującą informację:

debian

kubuntu

archlinux

solusy

mięta

Innymi słowy, w pliku distros-deb.txt będziemy wymieniać dystrybucje oparte na Debianie, ale widzimy, że wiersz nr 3 zawiera słowo „archlinux”, dystrybucję, która ewidentnie nie ma nic wspólnego z Debianem, więc musimy go usunąć. Aby usunąć wiersz nr 3 z tego pliku, dodamy następujące polecenie:

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

Wyjaśnienie tego wiersza jest proste: za pomocą `sed "3d"` wskazujemy, że usuniemy wiersz nr 3, za pomocą `distros-deb.txt` wskazujemy, na którym pliku ma pracować, czyli usunąć wiersz nr 3 z tego pliku. Do tego momentu, jeśli naciśniemy `<kbd>Enter</kbd>`, program wyświetli nam to, czego chcemy, ale w terminalu, więc za pomocą `> distros-deb-ok.txt` wskazujemy, że zamiast wyświetlać wynik w terminalu, powinien on zapisać go w pliku o tej nazwie.

Co jest proste?

Możemy również uniknąć używania pliku > distros-deb-ok.txt , używając parametru sed , parametru -i

Innymi słowy, jeśli chcemy usunąć wiersz z pliku i zapisać go pod tą samą nazwą (a nie w innym pliku), musimy po prostu dodać parametr -i :

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

Spowoduje to usunięcie wiersza nr 3 z pliku distros-deb.txt i zapisanie go.

A jeśli chcę zakresu linii, czyli usunięcia linii 3, ale także 4 i 5? Aby to osiągnąć, ustawiamy zakres od 3 do 5, czyli:

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

I pokaże mi tylko debian i kubuntu 

A co, jeśli chcę usunąć linię od drugiej do ostatniej, kiedy nie znam wszystkich wierszy?

Wystarczy użyć symbolu dolara - »$

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

W przypadku, gdy chcesz wyeliminować z pierwszej linii do # 4, po prostu umieszczamy wartość 1 na początku:

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

To właściwie wszystko, całkiem przydatna wskazówka, gdy chcesz pisać skrypty bash do automatyzacji zadań i potrzebujesz modyfikować i usuwać wiersze w plikach konfiguracyjnych. Do modyfikacji możemy użyć sed lub perl , a do usuwania – wiemy już, jak to zrobić za pomocą sed.

pozdrowienia


Dodaj jako preferowane źródło w Google