Jak używać Sed w systemie Linux
Sed to prosty program UNIX, który nie tworzy ani nie edytuje plików. Modyfikuje tylko dane przechodzące przez jego wejście i prezentuje zmodyfikowane dane na wyjściu. Tutaj przyjrzymy się krótkiemu przeglądowi filozofii UNIX, przejdziemy przez podstawy korzystania z programu sed
i pokażemy przykłady, jak używać programu do codziennych zadań.
Podstawy korzystania z Sed
Sed to program, który potrafi czytać i modyfikować strumienie danych tekstowych. Oznacza to, że w przeciwieństwie do zwykłego edytora tekstu, sed nie zmienia bezpośrednio plików na komputerze. Zamiast tego działa bardziej jak „filtr” dla przychodzących danych i pozwala na ich transformację w dowolny sposób.
Aby rozpocząć pracę z sed, najpierw utwórz plik z co najmniej pięcioma wierszami tekstu w środku. Upewnij się, że między wierszami znajduje się znak „nowej linii”:
Ogólne polecenie sed wygląda mniej więcej tak:
Jedną z najbardziej podstawowych funkcji w sed jest n
podpolecenie. Działa ono poprzez odczyt danych z wejścia sed i umieszczenie ich w „przestrzeni wzorców” programu. Jest to specjalny bufor, który przechowuje cały przychodzący tekst, zanim sed wykona na nim jakąkolwiek manipulację:
Kolejną podstawową funkcją sed jest p
subcommand. Podobnie jak n
, odczytuje dane przychodzące z wejścia sed i umieszcza je w przestrzeni wzorców programu. Jednak również jawnie drukuje je na wyjściu twojego terminala.
Używanie p
podpolecenia może być mylące dla początkujących, ponieważ uruchomienie go z dowolnym tekstem wejściowym powoduje, że sed drukuje swoje dane wyjściowe dwa razy. Dzieje się tak, ponieważ domyślnie sed automatycznie drukuje swoją przestrzeń wzorca niezależnie od tego, czy p
jest obecna, czy nie:
Aby wyłączyć to nietypowe zachowanie, dodaj -n
flagę przed uruchomieniem podpoleceń sed:
Mając już podstawy, w kolejnych sekcjach przyjrzymy się różnym sposobom wykorzystania sed do manipulowania danymi tekstowymi.
1. Wybieranie i przycinanie strumieni tekstowych
Oprócz drukowania, możesz również użyć sed do zaznaczania i przycinania tekstu zarówno ze strumieni danych, jak i plików. Najłatwiejszym sposobem na to jest dodanie wartości zakresu do podpolecenia p
.
Poniższe polecenie wykorzystuje składnię zakresu sed do wydrukowania wierszy od trzeciego do piątego w pliku „hello.txt”:
Możesz również użyć p
podpolecenia, aby wydrukować nieprzylegające do siebie wiersze w tekście. Na przykład poniższe polecenie drukuje pierwszy i czwarty wiersz w pliku „hello.txt”:
2. Usuwanie tekstu ze strumienia Sed
Sed może również usuwać dane z dowolnego przychodzącego strumienia tekstowego. Jest to pomocne, jeśli chcesz usunąć kilka wierszy tekstu z dużego pliku lub wyczyścić dane wyjściowe programu, aby wyświetlać tylko potrzebne informacje.
Aby to zrobić, użyj d
podpolecenia wraz z konkretnym wierszem lub zakresem, który chcesz usunąć:
Podobnie jak drukowanie wierszy tekstu, d
podpolecenie działa z zakresami wielowierszowymi. Na przykład, poniższe polecenie usunie pierwsze cztery wiersze z pliku „hello.txt”:
Oprócz dopasowania określonych zakresów wierszy, możesz użyć wyrażeń regularnych, aby znaleźć tekst, który chcesz usunąć. Spowoduje to, że sed poszuka wszystkich wierszy zawierających słowo „world” i je usunie:
Możesz również traktować wyrażenia regularne jako zakres dla swojego pliku wejściowego. Daje Ci to większą elastyczność w definiowaniu swoich wyborów w programie:
3. Dodawanie nowego tekstu do strumieni Sed
Oprócz usuwania tekstu, sed jest również w stanie dodawać nowy tekst do istniejących strumieni danych. Chociaż nie jest to pełnoprawny edytor tekstu, ta funkcja może być przydatna do jednorazowych edycji i podstawowych dodawań tekstu.
Aby dodać nowy wiersz tekstu, uruchom sed z poleceniem, a
po którym wpisz tekst, który chcesz dodać:
Można również dołączyć całe pliki do strumienia tekstowego sed. Aby to zrobić, użyj polecenia, r
po którym następuje nazwa pliku, który chcesz dodać:
4. Znajdowanie i zastępowanie tekstu w Sed
Jedną z najpotężniejszych funkcji sed jest możliwość wyszukiwania i zastępowania tekstu w strumieniu tekstowym. W przeciwieństwie do dodawania i usuwania tekstu, pozwala to na dynamiczną edycję danych podczas ich przechodzenia przez potoki UNIX, co czyni go o wiele bardziej elastycznym w porównaniu ze zwykłym edytorem tekstu.
Zacznij od przetestowania wydruku wprowadzonego tekstu bez żadnych modyfikacji z poziomu sed:
Zastąp p
podpolecenie poleceniem s
, a następnie dodaj po nim trzy ukośniki odwrotne (/):
Wstaw strukturalne wyrażenie regularne ciągu znaków, który chcesz dopasować, pomiędzy pierwszym i drugim ukośnikiem odwrotnym. Na przykład mogę umieścić następującą wartość, aby wyszukać słowa zaczynające się od „wo” w moim ciągu wejściowym:
Umieść kursor tekstowy pomiędzy drugim i trzecim ukośnikiem odwrotnym, a następnie podaj tekst, którym chcesz zastąpić swoje dopasowania. W przeciwieństwie do poprzedniej kolumny, ta sekcja nie używa strukturalnych wyrażeń regularnych:
Domyślnie sed zastępuje tylko pierwszy ciąg, który pasuje do konkretnego wiersza. Może to być problematyczne, jeśli chcesz zastąpić każde wystąpienie słowa w strumieniu tekstu. Aby to naprawić, dodaj opcję g
po trzecim ukośniku odwrotnym swojego wyrażenia:
5. Kopiowanie danych tekstowych do przestrzeni przytrzymywania
Sed używa dwóch buforów do przechowywania danych tekstowych: przestrzeni wzorca i przestrzeni przechowywania. Pierwszy służy jako tymczasowe miejsce dla tekstu przechodzącego przez wyrażenia sed. Tymczasem drugi działa jako schowek, w którym można przechowywać dowolne dane tekstowe.
Jedną z zalet tego podejścia jest to, że pozwala ono „przechowywać” pewne dane wyjściowe bez polegania na zewnętrznych programach. Może to być przydatne, jeśli planujesz używać sed do przetwarzania wieloetapowych manipulacji tekstem.
Aby zacząć korzystać ze spacji, najpierw upewnij się, że masz plik zawierający przynajmniej kilka wierszy tekstu:
Zastąp p
podpolecenie przez h
, a następnie podaj numer wiersza lub wartość wyrażenia regularnego, którą sed dopasuje do pliku. Spowoduje to, że sed weźmie ten konkretny wiersz tekstu i skopiuje go do swojej przestrzeni przechowywania:
Możesz również użyć H
podpolecenia, aby zapisać wiele wierszy tekstu w swojej przestrzeni wstrzymania. Na przykład poniższe polecenie zapisuje trzeci i czwarty wiersz mojego pliku tekstowego i drukuje je z powrotem do terminala:
6. Używanie etykiet do tworzenia pętli w Sed
Chociaż sed nie jest wszechstronnym językiem programowania, nadal możliwe jest tworzenie pętli wewnątrz programu. Jest to przydatne, jeśli potrzebujesz wyrażenia sed, które musi ciągle przechodzić przez konkretny fragment tekstu wejściowego.
Aby utworzyć pętlę w sed, musisz najpierw utworzyć etykietę dla swojego wyrażenia sed. W tym celu musisz użyć podpolecenia, :
a następnie etykiety, której chcesz użyć dla swojego wyrażenia.
Podaj kryteria dopasowania dla swojego wyrażenia sed. W moim przypadku chcę, aby dotarło do końca każdego wiersza w moim tekście wejściowym:
Wpisz podpolecenia sed, które chcesz uruchomić, gdy sed znajdzie dopasowanie, a następnie ujęto je w nawiasy klamrowe. Poniższe polecenie łączy dwa sąsiadujące wiersze, zastępuje znak nowej linii spacją, a następnie wraca do początku wyrażenia:
Możesz nawet rozszerzyć to tak, aby pasowało do niemal każdego rodzaju tekstu wejściowego. Na przykład poniższe polecenie używa rozszerzonej funkcji regex sed, aby usunąć znaczniki HTML z tekstu wejściowego:
7. Wprowadzanie trwałych zmian w Sed
Podobnie jak każde inne narzędzie UNIX, sed może korzystać z przekierowania wyjścia i potoków. Nie tylko pozwala to na sklejenie sed z innymi programami, ale także daje możliwość trwałego wprowadzenia zmian.
Poniższy wiersz kodu tworzy nowy plik „welcome.txt” z wyniku mojego polecenia sed:
Oprócz przekierowania wyjścia możesz również użyć wbudowanej -i
flagi, aby edytować bieżący plik zamiast wyprowadzać zmiany w konsoli terminala. Na przykład poniższe polecenie usuwa wszystkie znaki nowej linii z mojego pliku tekstowego i zapisuje go:
Jeśli cała ta rozmowa wzbudziła Twoją ciekawość w kwestii wiersza poleceń Linuksa. Możesz przeczytać nasz wcześniejszy artykuł, w którym omawiamy niektóre z najciekawszych poleceń Bash, z których możesz korzystać już dziś.
Źródło obrazu: Morgan Richardson przez Unsplash . Wszystkie zmiany i zrzuty ekranu autorstwa Ramces Red.
Dodaj komentarz