Sed to prosty program uniksowy. Nie tworzy i nie edytuje plików. Modyfikuje tylko dane, które przechodzą przez jego wejście i prezentuje zmodyfikowane dane na swoim wyjściu. Mimo to sed jest uważany za jedno z najpotężniejszych narzędzi UNIX, jakie napotkasz w Linuksie, zwłaszcza gdy jest on połączony z innymi programami w twoim systemie.
Ten artykuł ma na celu nauczenie podstaw korzystania z tego małego programu. Ponadto zawiera krótki przegląd Filozofia UNIX i jak ten pomysł jest ważny dla zrozumienia, jak działa twój komputer.
Czym jest filozofia UNIX?
Filozofia UNIX to idea, że program powinien wykonywać tylko jedno zadanie i robić to dobrze. Zachęca do pisania prostych programów, które można ponownie wykorzystać do różnych funkcji, zamiast tworzyć złożone programy, których nie można ponownie wykorzystać do innych zadań.
Dobrym tego przykładem jest program cat
. Jest to proste narzędzie, które pobiera tylko dane wejściowe i drukuje je jako strumień tekstu.

Filozofia UNIX pozwala na używanie programu w połączeniu z innymi narzędziami w systemie. Z kolei to podejście ostatecznie tworzy pojedynczy interfejs dla twojego systemu, którego możesz się nauczyć raz i ponownie wykorzystać w różnych kontekstach.
Na przykład możesz przesłać strumień kota do programu takiego jak grep
. Jest to prosty program, który robi tylko jedną rzecz. Szuka ciągu tekstu w danych wejściowych i drukuje wiersze, w których pojawia się ten tekst.

Z drugiej strony możesz zamiast tego karmić ten sam strumień kota do pager ekranu Jak na przykład less
. To z kolei pozwoli Ci przewijać strumień tak, jakby był to pojedynczy plik tekstowy.

Jak działa Sed?
Mając to na uwadze, sed to program, który czyta strumień tekstu i modyfikuje go. Jednak sed modyfikuje tylko strumień tekstu, co oznacza, że nie zmienia bezpośrednio plików na twoim komputerze. Może to być mylące dla początkującego, ponieważ wszelkie zmiany wprowadzone w sed nie pojawią się na dysku.
Mimo to sed jest wciąż potężnym narzędziem. Na przykład możesz uruchomić następującą linię, aby odczytać dane wyjściowe funkcji printf
Komenda:
printf "hello\nmaketecheasier\nworld\n" | sed n

Podstawy używania Sed
Wiedząc o tym, niezwykle łatwo jest używać seda do podstawowych zadań. Rozważmy następujący przykład:

W tym użyłem n
polecenie, aby wydrukować zawartość pliku „hello”.
1. Wybieranie i przycinanie strumieni tekstu
Co więcej, możesz również polecić sedowi zmodyfikowanie tego strumienia tekstu. Na przykład możesz użyć 2q
polecenie, aby wypisał tylko pierwsze dwa wiersze pliku „hello”:

Może to być niezwykle pomocne, jeśli chcesz uzyskać tylko kilka pierwszych wierszy pliku tekstowego. Możesz jednak również użyć p
polecenie, aby nakazać sedowi drukowanie tylko zakresu wierszy w pliku.

W powyższym przykładzie użyłem sed do wydrukowania trzeciego i czwartego wiersza pliku „hello”. Możesz również użyć tego samego p
polecenie, aby wydrukować niesąsiadujące wiersze w pliku tekstowym. Rozważmy następujący przykład:

W związku z tym mówię sedowi, aby wydrukował tylko pierwszą i czwartą linię pliku „hello”. Może się to przydać, jeśli chcesz połączyć wiele linii z różnych strumieni w jeden plik.
Na przykład możesz użyć sed z >
operatora, aby zapisać zmodyfikowany strumień do pliku.
sed -n 1~4p hello.txt > welcome.txt

2. Usuwanie tekstu
Kolejną świetną funkcją sed jest usuwanie tekstu ze strumienia. W przeciwieństwie do drukowania, pozwala to wybrać wiersze tekstu, które sed ma pominąć w strumieniu.
Na przykład użyłem d
polecenie, aby usunąć drugą i piątą linię pliku hello.

Jedną z zalet korzystania z tego zamiast p
polecenie polega na tym, że pozwala to usunąć tylko wiersz, którego nie chcesz. Jest to przydatne, jeśli chcesz wyczyścić duży plik lub przyciąć dane wyjściowe, aby wyświetlić tylko potrzebne informacje.
3. Dodawanie nowego tekstu
Dzięki temu możesz również użyć sed z samym sobą, aby włączyć nowe dane do strumienia tekstowego. Na przykład możesz użyć a
polecenie, aby dołączyć wiersz tekstu do bieżącego strumienia:
sed -n 2p hello.txt | sed a\ "this is a new line"

Ponadto możliwe jest również włączenie całych plików do strumienia tekstowego. W tym celu możesz użyć r
polecenie, które pozwoli ci wczytać pojedynczy plik do twojego bieżącego strumienia. Aby to zrobić, możesz uruchomić następujące polecenie, aby dołączyć plik powitalny po drugim wierszu powitania.
sed -n 2p hello.txt | sed rwelcome.txt

4. Podstawianie tekstu i manipulacja strumieniem
Jednym z genialnych zastosowań sed jest modyfikowanie istniejących strumieni. Dzieje się tak, gdy bierzesz strumień wprowadzania tekstu i używasz wbudowanych funkcji sed do zmiany zawartości strumienia.
Jest to prawdopodobnie najpotężniejsza funkcja sed. Ponieważ daje to możliwość dynamicznej edycji danych przechodzących przez rury. Na przykład, możesz łatwo edytować wyjście programu tak, jakby był to plik tekstowy:
printf "hello\nmaketecheasier\nworld\n" | sed s/world/website/

W tym przykładzie użyłem s
polecenie, aby zastąpić słowo „świat” słowem „strona internetowa”. Jednak w przeciwieństwie do poprzednich poleceń, to polecenie używa określonej składni, aby działać poprawnie.
Wiedząc o tym, ogólna forma s
polecenie wygląda mniej więcej tak:
s/[regex]/(string)/{options}
- Pierwsza kolumna wskazuje, że jest to polecenie zastępujące. W większości przypadków wystarczy użyć
s
polecenie, aby zmodyfikować strumień tekstowy. - Druga kolumna wskazuje słowo, które chcesz zastąpić, używając strukturalnych wyrażeń regularnych. Jest to sposób opisywania słów i gramatyki przy użyciu ogólnych zasad. Na przykład możesz opisać słowa „odbitki”, „książę” i „podkład” pisząc
pri[n,m]..
. - Trzecia kolumna opisuje słowo, które ma być starym ciągiem. W przeciwieństwie do poprzedniej kolumny, ta kolumna nie używa wyrażeń regularnych. Zamiast tego możesz opisać swoje nowe słowo zwykłym tekstem.
- Ostatnia kolumna mówi sedowi, aby zastosował wszelkie dodatkowe opcje potrzebne do zamiany. W tym przypadku najczęstszą flagą, której możesz chcieć użyć, jest
g
. Oznacza to, że polecenie zastąpi każde wystąpienie wyrażenia regularnego nowym ciągiem.
5. Korzystanie z zastępowania tekstu w plikach
Możesz zastosować s
polecenie do manipulowania dowolnym rodzajem strumienia tekstu, który chcesz. Jest to przydatne nie tylko dlatego, że pozwala modyfikować dane w locie, ale także dlatego, że możesz tego używać z prawie wszystkim w wierszu poleceń systemu Linux.
Na przykład możesz użyć s
polecenie z plikiem tekstowym poprzez dodanie nazwy pliku na końcu polecenia:
sed s/hello/welcome/ hello.txt

W tym miejscu mówię sedowi, aby przeczytał plik „hello” i zamienił pierwsze wystąpienie słowa „hello” na „welcome”. Mogę to zrobić dla każdego wystąpienia słowa „hello” w pliku, dodając g
opcja:
sed s/hello/welcome/g hello.txt

Często Zadawane Pytania
Czy za pomocą sed można napisać modyfikacje do pliku?
Tak! Oprócz używania operatorów plików, możliwe jest użycie seda do bezpośredniego zapisania dowolnego zmodyfikowanego strumienia tekstu do pliku. Aby to zrobić, możesz użyć sed z -i
oflaguj lub użyj w
polecenie, aby zapisać strumień do pliku.
Należy jednak zauważyć, że te polecenia nie są zgodne ze standardem POSIX. Oznacza to, że nie będą one działać, jeśli używasz seda w wersji innej niż GNU.
Za każdym razem, gdy używam sed, otrzymuję komunikat „nieprzerwany”. Czy moja instalacja jest zepsuta?
Zupełnie nie! Jest to problem, który występuje, gdy nie piszesz poprawnie polecenia sed. Jest to powszechne w przypadku poleceń podstawiania, w których próbujesz dopasować lub zastąpić ciąg spacjami.
Na przykład uruchomienie następującego polecenia spowoduje błąd „niezakończony”: sed s/hello/welcome back/g hello.txt
.
Możesz to naprawić, dodając znak ucieczki „\” przed spacją. Jest to znak specjalny, który mówi sedowi, aby uwzględniał spację podczas wyszukiwania lub zastępowania tekstu.
Dzięki temu poprawna wersja powyższego polecenia wygląda mniej więcej tak: sed s/hello/welcome\ back/g hello.txt
.
Czy oprócz „g” są inne flagi, których mogę używać z poleceniem „s”?
Tak! Oprócz g
możesz również użyć p
flaga informująca sed o wyświetlaniu zmodyfikowanych linii.
Kolejna flaga, której możesz użyć s
jest e
. Pozwala to na uruchamianie poleceń powłoki za każdym razem, gdy sed zastępuje słowo. Na przykład możesz uruchomić następujące polecenie, aby uruchomić touch
za każdym razem, gdy znajdzie w pliku słowo „hello”: sed s/hello\ /touch\ /e hello.txt
.
Na koniec możesz również użyć i
flaga informująca seda, aby nie rozróżniał wielkości liter podczas wyszukiwania dopasowań. Jest to przydatne, jeśli chcesz dopasować to samo słowo, ale z różnymi stylami wielkości liter. Na przykład następujące polecenie zastąpi słowo „hello” słowem „welcome” niezależnie od jego wielkości: sed s/HELLO/welcome/i hello.txt
.
Jeśli cała ta rozmowa zainteresowała Cię wierszem poleceń Linuksa. Możesz przeczytać nasz wcześniejszy artykuł, w którym omawiamy niektóre z najciekawszych podpowiedzi Bash, z których możesz korzystać dzisiaj.
Kredyt obrazu: Unsplash
Czy ten artykuł jest przydatny?
Zapisz się do naszego newslettera!
Nasze najnowsze samouczki dostarczane prosto do Twojej skrzynki odbiorczej