31+ Przykłady dla sed Linux Command w Manipulacji Tekstem

W poprzednim poście, rozmawialiśmy o funkcjach basha i jak ich używać z linii poleceń bezpośrednio, i widzieliśmy kilka innych fajnych rzeczy. Dzisiaj porozmawiamy o poręcznym narzędziu do manipulacji ciągami znaków zwanym sed lub sed Linux command.

Używamy sed do pracy z plikami tekstowymi takimi jak pliki dziennika, pliki konfiguracyjne i inne pliki tekstowe.

W tym poście skupimy się na sed Linux command, które jest używane do manipulacji tekstem, co jest niezbędnym krokiem w naszej podróży skryptowej bash.

System Linux dostarcza pewnych narzędzi do przetwarzania tekstu; jednym z tych narzędzi jest sed.

Przedyskutujemy 31+ przykładów z obrazkami, aby pokazać wyjście każdego przykładu.

Spis treści

Zrozumienie polecenia sed Linux

Polecenie sed jest nieinteraktywnym edytorem tekstu. Polecenie sed Linux edytuje dane na podstawie reguł, które podasz; możesz go używać w ten sposób:

$ sed options file

Nie jesteś ograniczony do używania sed do manipulowania plikami; stosujesz go do STDIN bezpośrednio, w ten sposób:

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

sed Linux command

Komenda s zastępuje pierwszy tekst drugim wzorcem tekstowym. W tym przypadku zastąpiliśmy ciąg „website” słowem „page”.

Powyższy przykład był prostym przykładem demonstrującym działanie narzędzia. Możemy użyć linuksowego polecenia sed również do manipulowania plikami.

Stwórzmy przykładowy plik :

sed manipulate file

$ sed 's/test/another test/' ./myfile

Wyniki są wypisywane na ekran natychmiast; nie musisz czekać na przetworzenie pliku do końca.

Jeśli twój plik jest wystarczająco duży, zobaczysz wynik zanim przetwarzanie zostanie zakończone.

Komenda Sed Linux nie aktualizuje twoich danych. Wysyła jedynie zmieniony tekst do STDOUT. Plik jest nadal nietknięty. Jeśli potrzebujesz nadpisać istniejącą zawartość, możesz sprawdzić nasz poprzedni post, który mówił o przekierowaniach.

Używanie wielu poleceń sed Linux w wierszu poleceń

Aby uruchomić wiele poleceń sed, możesz użyć opcji -e w ten sposób:

$ sed -e 's/This/That/; s/test/another test/' ./myfile

sed wiele poleceń

Musisz oddzielić polecenia sed średnikiem bez żadnych spacji.

Możesz również użyć pojedynczego cytatu do oddzielenia poleceń w ten sposób:

$ sed -e '> s/This/That/> s/test/another test/' myfile

sed oddzielne polecenia

Ten sam rezultat, nic wielkiego.

Odczytywanie poleceń z pliku

Możesz zapisać swoje polecenia sed w pliku i używać ich, podając plik za pomocą opcji -f.

$ cat mycommandss/This/That/s/test/another test/
$ sed -f mycommands myfile

czytaj polecenia z pliku

Zastępowanie flag

Przyjrzyjrzyj się uważnie poniższemu przykładowi:

$ cat myfile
$ sed 's/test/another test/' myfile

sed substitute flag

Powyższy wynik pokazuje, że zastąpiliśmy pierwsze wystąpienie w każdej linii. Aby zastąpić wszystkie wystąpienia wzorca, należy użyć jednej z poniższych flag zastępowania.

Flagi możemy zapisać w ten sposób:

s/pattern/replacement/flags

Istnieją cztery rodzaje zastępowania:

  • g, zastąp wszystkie wystąpienia.
  • Liczba, numer wystąpienia nowego tekstu, który ma zostać zastąpiony.
  • p, drukuj oryginalną treść.
  • w plik: oznacza zapisanie wyników do pliku.

Możesz ograniczyć zastępowanie przez określenie numeru wystąpienia, które powinno być zastąpione w ten sposób:

$ sed 's/test/another test/2' myfile

flaga numeru

Jak widzisz, zastąpiliśmy tylko drugie wystąpienie w każdej linii.

Flaga g oznacza global, co oznacza globalne zastąpienie wszystkich wystąpień:

$ sed 's/test/another test/g' myfile

sed global flag

Flaga p drukuje każdą linię zawierającą dopasowanie wzorca, możesz użyć opcji -n, aby wydrukować tylko zmodyfikowane linie.

$ cat myfile
$ sed -n 's/test/another test/p' myfile

sed supress lines

Flaga w zapisuje dane wyjściowe do określonego pliku:

$ sed 's/test/another test/w output' myfile

send output to file

Wypisaliśmy dane wyjściowe na ekranie, ale pasujące linie zapisaliśmy do pliku wyjściowego.

Zastępowanie znaków

Przypuśćmy, że chcesz wyszukać powłokę bash i zastąpić ją powłoką csh w pliku /etc/passwd za pomocą sed, cóż, możesz to zrobić w prosty sposób:

$ sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd

Oh!!! to wygląda okropnie.

Na szczęście jest inny sposób, aby to osiągnąć. Możesz użyć wykrzyknika (!) jako ogranicznika łańcucha znaków, jak poniżej:

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

Teraz jest to łatwiejsze do odczytania.

Ograniczanie sed

Polecenie sed przetwarza cały plik. Możesz jednak ograniczyć polecenie sed do przetwarzania konkretnych linii; istnieją dwa sposoby:

  • Zakres linii.
  • Wzorzec, który pasuje do konkretnej linii.

Możesz wpisać jedną liczbę, aby ograniczyć ją do konkretnej linii:

$ sed '2s/test/another test/' myfile

sed restricted

Zmodyfikowaliśmy tylko linię drugą.

A co z użyciem zakresu linii:

$ sed '2,3s/test/another test/' myfile

replace zakres linii

Możemy też zacząć od linii do końca pliku:

$ sed '2,$s/test/another test/' myfile

sed replace to the end

Albo możemy użyć wzorca jak poniżej:

$ sed '/likegeeks/s/bash/csh/' /etc/passwd

sed pattern match

Absolutnie!!

Możesz użyć wyrażeń regularnych do napisania tego wzorca, aby był bardziej ogólny i użyteczny.

Usuwanie linii

Aby usunąć linie używając sed, możesz użyć flagi delete (d) jest twoim przyjacielem.

Flaga delete usuwa tekst ze strumienia, nie z oryginalnego pliku.

$ sed '2d' myfile

sed delete line

Tutaj usuwamy tylko drugą linię z myfile.

A co z usuwaniem zakresu linii?

$ sed '2,3d' myfile

delete multiple line

Tutaj usuwamy zakres linii, drugą i trzecią.

Inny typ zakresów:

$ sed '3,$d' myfile

delete to the end

Tutaj usuwamy od trzeciej linii do końca pliku.

Wszystkie te przykłady nigdy nie modyfikują twojego oryginalnego pliku.

$ sed '/test 1/d' myfile

delete pattern match

Tutaj używamy wzorca do usunięcia linii, jeśli jest dopasowany w pierwszej linii.

Jeśli chcesz usunąć zakres wierszy, możesz użyć dwóch wzorców tekstowych, takich jak ten:

$ sed '/second/,/fourth/d' myfile

delete range of lines

Usunęliśmy od drugiego do czwartego wiersza.

Wstawianie i dołączanie tekstu

Możesz wstawiać i dołączać linie tekstu używając następujących flag:

  • Flaga (i).
  • Flaga (a).
$ echo "Another test" | sed 'i\First test '

sed insert text

Dodaliśmy tekst przed podaną linią.

$ echo "Another test" | sed 'a\First test '

sed append

Dodaliśmy tekst po wskazanej linii.

A co z dodawaniem tekstu w środku?

Proste, spójrz na poniższy przykład:

$ sed '2i\This is the inserted line.' myfile

sed insert line

I tak samo działa dodawanie, ale spójrz na pozycję dodawanego tekstu:

$ sed '2a\This is the appended line.' myfile

sed append line

Użyliśmy tych samych flag, ale z lokalizacją wstawiania lub dołączania.

Modyfikowanie linii

Aby zmodyfikować konkretną linię, możesz użyć flagi (c) w ten sposób:

$ sed '3c\This is a modified line.' myfile

sed modify line

Możesz użyć wzorca wyrażenia regularnego, a wszystkie linie pasujące do tego wzorca zostaną zmodyfikowane.

$ sed '/This is/c Line updated.' myfile

sed pattern match

Przekształcanie znaków

Flaga transform (y) działa na takie znaki jak poniżej:

$ sed 'y/123/567/' myfile

sed transform character

Zastosowaliśmy transformację do wszystkich danych i nie możemy ograniczyć jej do konkretnego wystąpienia.

Wydruk numerów linii

Numer linii można wydrukować używając znaku (=) w ten sposób:

$ sed '=' myfile

sed numery linii

Jednakże używając -n w połączeniu ze znakiem równości, polecenie sed wyświetla numer linii, która zawiera dopasowanie.

$ sed -n '/test/=' myfile

ukryć linie

Odczyt danych z pliku

Możesz użyć flagi (r) do odczytania danych z pliku.

Możesz zdefiniować numer linii lub wzór tekstu, który chcesz odczytać.

$ cat newfile
$ sed '3r newfile' myfile

odczytaj dane z pliku

Wstawiliśmy treść po trzeciej linii zgodnie z oczekiwaniami.

A to jest użycie wzorca tekstowego:

$ sed '/test/r newfile' myfile

read match pattern

Cool right?

Przydatne przykłady

Załóżmy, że mamy plik, który zawiera tekst z placeholderem, i mamy inny plik, który zawiera dane, które wypełnią placeholder w innym pliku.

Użyjemy flag (r) i (d) do wykonania zadania.

Słowo DATA w tym pliku jest placeholderem dla prawdziwej zawartości, którą będziemy przechowywać w innym pliku o nazwie data.

Zastąpimy je rzeczywistą zawartością:

$ Sed '/DATA>/ {r newfiled}' myfile

repalce placeholder

Absolutnie!!! jak widzisz, wypełniliśmy miejsce placeholder danymi z innego pliku.

To jest tylko małe wprowadzenie do polecenia sed. Polecenie sed Linux to inny świat sam w sobie.

Jedynym ograniczeniem jest twoja wyobraźnia.

Mam nadzieję, że łatwo ci będzie manipulować ciągami znaków za pomocą polecenia sed Linux.

Dziękuję.

Założyciel LikeGeeks. Pracuję jako administrator systemu Linux od 2010 roku. Jestem odpowiedzialny za utrzymanie, zabezpieczanie i rozwiązywanie problemów z serwerami Linux dla wielu klientów na całym świecie. Uwielbiam pisać skrypty w powłoce i Pythonie, aby zautomatyzować moją pracę.

Dodaj komentarz

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