Sed lub Edytor Strumieni jest bardzo potężnym narzędziem oferowanym przez systemy Linux/Unix. Jest on głównie używany do podstawiania tekstu, znajdowania & replace ale może również wykonywać inne operacje na tekście jak wstawianie, usuwanie, wyszukiwanie itp. Dzięki Sedowi możemy edytować całe pliki bez konieczności ich otwierania. Sed wspiera również użycie wyrażeń regularnych, co czyni sed jeszcze potężniejszym narzędziem do manipulacji testami.

W tym artykule nauczymy się używać komendy SED z pomocą kilku przykładów. Podstawowa składnia polecenia sed to,

sed OPCJE…

Sed-Command-Options

Zobaczmy teraz kilka przykładów.

Przykład :1) Wyświetlanie częściowego tekstu pliku

Z pomocą sed, możemy zobaczyć tylko część pliku, zamiast widzieć cały plik. Aby zobaczyć niektóre linie pliku, użyj następującego polecenia,

$ sed -n 22,29p testfile.txt

Tutaj, opcja 'n' wyłącza drukowanie całego pliku & opcja 'p' wydrukuje tylko linie od 22 do 29.

Przykład :2) Wyświetl wszystkie z wyjątkiem niektórych linii

Aby wyświetlić całą zawartość pliku z wyjątkiem pewnej części, użyj następującego polecenia,

$ sed 22,29d testfile.txt

Opcja 'd' usunie wspomniane linie z wyjścia.

Przykład :3) Wyświetlanie każdej 3. linii zaczynającej się od N-tej linii

Aby wyświetlić zawartość każdej 3. linii zaczynającej się od linii numer 2 lub dowolnej innej linii, użyj następującego polecenia

$ sed -n '2~3p' file.txt

Przykład :4 ) Usuwanie linii za pomocą polecenia sed

Aby usunąć linię za pomocą sed z pliku, użyj następującego polecenia,

$ sed Nd testfile.txt

gdzie 'N' to numer linii & opcja 'd' usunie wspomniany numer linii. Aby usunąć ostatnią linię pliku, użyj

$ sed $d testfile.txt

Przykład :5) Usuwanie zakresu linii

Aby usunąć zakres linii z pliku, uruchom

$ sed '29,34d' testfile.txt

To usunie linie od 29 do 34 z pliku testfile.txt.

Przykład :6) Usuwanie linii innych niż wymienione

Aby usunąć linie inne niż wymienione z pliku, użyjemy '!'

$ sed '29,34!d' testfile.txt

Tutaj opcja '!' jest użyta jako nie, więc odwróci warunek, tj. nie usunie wymienionych linii. Wszystkie linie inne niż 29-34 zostaną usunięte z pliku testfile.txt.

Przykład :7) Dodawanie pustych linii/spacji

Aby dodać pustą linię po każdej niepustej linii, użyjemy opcji 'G',

$ sed G testfile.txt

Przykład :8) Wyszukiwanie i zastępowanie ciągu znaków za pomocą sed

Aby wyszukać & zastąpić ciąg znaków z pliku, skorzystamy z poniższego przykładu,

$ sed 's/danger/safety/' testfile.txt

tutaj opcja 's' wyszuka słowo 'danger' & zamień je na 'safety' w każdej linii tylko dla pierwszego wystąpienia.

Przykład :9) Wyszukaj i zastąp ciąg znaków z całego pliku używając sed

Aby całkowicie zastąpić słowo z pliku, użyjemy opcji 'g' z 's',

$ sed 's/danger/safety/g' testfile.txt

Przykład :10) Zastąp n-te wystąpienie wzorca ciągu znaków

Możemy również zastąpić ciąg znaków przy n-tym wystąpieniu z pliku. Na przykład zastąpić 'niebezpieczeństwo' na 'bezpieczeństwo' tylko przy drugim wystąpieniu,

$ sed ‘s/danger/safety/2’ testfile.txt

Aby zastąpić 'niebezpieczeństwo' przy drugim wystąpieniu każdej linii z całego pliku, użyj

$ sed 's/danger/safety/2g' testfile.txt

Przykład :11) Zastąp ciąg w konkretnej linii

Aby zastąpić ciąg tylko z konkretnej linii, użyj

$ sed '4 s/danger/safety/' testfile.txt

To zastąpi tylko ciąg z 4 linii pliku. Możemy również wymienić zakres linii zamiast pojedynczej linii,

$ sed '4,9 s/danger/safety/' testfile.txt

Przykład :12) Dodaj linię po/przed dopasowanym wyszukiwaniem

Aby dodać nową linię z jakąś treścią po każdym dopasowaniu wzorca, użyj opcji 'a',

$ sed '/danger/a "This is new line with text after match"' testfile.txt

Aby dodać nową linię z jakąś treścią a przed każdym dopasowaniem wzorca, użyj opcji 'i',

$ sed '/danger/i "This is new line with text before match" ' testfile.txt

Przykład :13) Zmiana całej linii z dopasowanym wzorcem

Aby zmienić całą linię na nową, kiedy wzorzec wyszukiwania pasuje, musimy użyć opcji 'c' z sed,

$ sed '/danger/c "This will be the new line" ' testfile.txt

Więc kiedy wzorzec pasuje do 'danger', cała linia zostanie zmieniona na wspomnianą linię.

Zaawansowane opcje z sed

Do tej pory używaliśmy tylko prostych wyrażeń z sed, teraz omówimy kilka zaawansowanych zastosowań sed z regex,

Przykład :14) Uruchamianie wielu poleceń sed

Jeśli potrzebujemy wykonać wiele wyrażeń sed, możemy użyć opcji 'e' do łańcuchowego wykonywania poleceń sed,

$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt

Przykład :15) Tworzenie kopii zapasowej przed edycją pliku

Aby utworzyć kopię zapasową pliku przed jego edycją, użyj opcji '-i.bak',

$ sed -i.bak -e 's/danger/safety/g' testfile.txt

To utworzy kopię zapasową pliku z rozszerzeniem .bak. Możesz również użyć innego rozszerzenia, jeśli chcesz.

Przykład :16) Usuwanie linii pliku zaczynającej się od & kończącej się wzorcem

Aby usunąć linię zaczynającą się od określonego ciągu znaków & kończącą się innym ciągiem znaków, użyj

$ sed -e 's/^danger.*stops$//g' testfile.txt

To usunie linię z 'danger' na początku & 'stops' na końcu & to może mieć dowolną liczbę słów pomiędzy , '.*' definiuje tę część.

Przykład :17) Dodawanie linii

Aby dodać trochę treści przed każdą linią z sed & regex, użyj

$ sed -e 's/.*/testing sed &/' testfile.txt

Teraz każda linia będzie miała 'testowanie sed' przed nią.

Przykład :18) Usuwanie wszystkich komentowanych linii & pustych linii

Aby usunąć wszystkie komentowane linie tj. linie z # & wszystkie puste linie, użyj

$ sed -e 's/#.*//;/^$/d' testfile.txt

Aby usunąć tylko skomentowane linie, użyj

$ sed -e 's/#.*//' testfile.txt

Przykład :19) Uzyskaj listę wszystkich nazw użytkowników z pliku /etc/passwd

Aby uzyskać listę wszystkich nazw użytkowników z pliku /etc/passwd, użyj

$ sed 's/\(*\).*/\1/' /etc/passwd

Kompletna lista wszystkich nazw użytkowników zostanie wygenerowana na ekranie jako wyjście.

Przykład :20) Zapobieganie nadpisywaniu linków systemowych komendą sed

Komenda 'sed -i' jest znana z tego, że usuwa linki systemowe & tworząc tylko zwykłe pliki w miejsce pliku z linkami. Więc aby uniknąć takiej sytuacji & uniemożliwić poleceniu 'sed -i' niszczenie linków, użyj opcji '-follow-symklinks' w wykonywanym poleceniu.

Załóżmy, że chcę wyłączyć SELinux w CentOS lub RHEL Severs

# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *