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