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.

Also read:5 najlepszych dystrybucji Linux-Libre dla lepszego bezpieczeństwa

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.

Sed Basics 03 Próbka kota 2

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.

Sed Basics 04 Próbka fajki Grep

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.

Sed Basics 05 Mniej próbki fajki

Also read:6 najlepszych edytorów tekstu Linux6 najlepszych edytorów tekstu Linux

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:

printf "hellonmaketecheasiernworldn" | sed n
Podstawy Sed 08 Polecenie odczytu Sed

Also read:Używanie du do zwolnienia miejsca na dysku w systemie LinuxUżywanie du do zwolnienia miejsca na dysku w systemie Linux

Podstawy używania Sed

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

Sed Basics 09 Przeczytaj plik

W tym użyłem n 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 powiedzieć mu, żeby drukował tylko pierwsze dwa wiersze helloplik:

Sed Basics 10 Drukuj pierwsze wiersze 1

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

Sed Basics 11 Drukuj linie środkowe

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

Sed Basics 12 Drukuj nieprzylegające linie

Mówiąc to, mówię sedowi, aby wypisał tylko pierwszą i czwartą linię znaku helloplik. 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
Sed Basics 13 Zapisz nieprzylegające wiersze do pliku

Also read:Jak korzystać z polecenia dd w systemie LinuxJak korzystać z polecenia dd w systemie Linux

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 aby usunąć drugi i piąty wiersz pliku hello.

Sed Basics 14 Usuń wiersze

Jedną z zalet korzystania z tego zamiast p jest to, ż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 aby dołączyć wiersz tekstu do bieżącego strumienia:

sed -n 2p hello.txt | sed a "this is a new line"
Sed Basics 15 Dodaj linie

Ponadto możliwe jest również włączenie całych plików do strumienia tekstowego. W tym celu możesz użyć r co pozwoli Ci wczytać pojedynczy plik do 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
Sed Basics 16 Dodaj plik do wiersza

Also read:Jak używać Emacsa jako czytnika USENET z GnusJak używać Emacsa jako czytnika USENET z Gnus

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 "hellonmaketecheasiernworldn" | sed s/world/website/
Podstawy Sed 17 Modyfikuj wyjście poleceń

W tym przykładzie użyłem s zastąpić słowo worldz website”. Unlike the previous commands, however, this command uses a specific syntax to work properly.

Wiedząc o tym, ogólna forma s 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 aby zmodyfikować strumień tekstu.
  • 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 prints”, princeoraz primerprzez pisanie 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.

Also read:Przewodnik dla początkujących po wyrażeniach regularnychPrzewodnik dla początkujących po wyrażeniach regularnych

5. Korzystanie z zastępowania tekstu w plikach

Możesz zastosować s 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 plik tekstowy poprzez dodanie nazwy pliku na końcu polecenia:

sed s/hello/welcome/ hello.txt
Sed Basics 18 Modyfikuj plik Pojedyncze słowo

W tym mówię sedowi, aby przeczytał helloplik i zastąp pierwsze wystąpienie słowa helloz welcome”. I can then do this for every instance of the word hellow pliku, dodając g:

sed s/hello/welcome/g hello.txt
Sed Basics 19 Modyfikuj plik Wszystkie słowa

Also read:5 lepszych czytników USENET dla systemu Linux5 lepszych czytników USENET dla systemu Linux

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 lub użyj w 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 wyświetlenie unterminatedbłąd: sed s/hello/welcome back/g hello.txt.

Możesz to naprawić, dodając escape character before your spaces. This is a special character that tells sed to include the space when either searching or replacing text.

With that, the correct version of the command above looks something like this: 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 gmożesz również użyć p powiedzieć sedowi, żeby wyświetlał zmodyfikowane linie.

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 słowo hellow pliku: sed s/hello /touch /e hello.txt.

Na koniec możesz również użyć i aby powiedzieć sedowi, 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 helloz welcomeniezależnie od przypadku: 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

Zapisz się do naszego newslettera!

Nasze najnowsze samouczki dostarczane prosto do Twojej skrzynki odbiorczej

Ramces czerwony

Ramces czerwony

Ramces jest pisarzem technologicznym, który przez całe życie żył z komputerami. Płodny czytelnik i student antropologii, jest ekscentryczną postacią, która pisze artykuły o Linuksie i wszystkim *nix.

Poprzedni artykułKorzystasz z oprogramowania beta czy czekasz na stabilną wersję?
Następny artykułZ której przeglądarki korzystasz i dlaczego?