W Unix/Linux SED jest dedykowanym poleceniem do edycji strumieni. Tutaj pojawia się nazwa polecenia (edytor strumienia). Wykonuje strumień jako wejście, filtruje i przekształca swoją zawartość, a także wynika, że wynika z tego, że instrukcja.
W tym przewodniku przyjrzymy się użyciu SED z wyrażeniami regularnymi (Regex w skrócie), aby zastąpić zawartość w pliku tekstowym. W tym przewodniku użyje wersji SED GNU/Linux.
Chwytanie przykładowego pliku tekstowego
Do celów demonstracyjnych tworzymy prosty plik tekstowy z pewnym tekstem, aby ćwiczyć nasze polecenia SED. Utwórz plik tekstowy za pomocą Nano:
$ nano sed-praktyka.tekst
Wewnątrz pliku wprowadź następujący tekst:
#!/bin/bash
echo „The Quick Brown Fox”
Echo „skacze nad leniwym psem”
Wymiana tekstów za pomocą SED
Podstawowa struktura dowodzenia SED do wymiany tekstów jest następująca:
$ sed -i 's /// g'
Tutaj:
Wypróbujmy to. W poniższym przykładzie zastępujemy z w praktyce SED.tekst:
$ sed -i 's/the/the/g' sed -praktyka.tekst
Sprawdź zmiany.
$ cat sed-praktyka.tekst
Jak widać, pomyślnie zmieniliśmy zawartość pliku.
Praca z znakami ograniczającymi
Jak opisano w poprzedniej sekcji, instrukcje SED są wyposażone w znaki ograniczające, aby oddzielić różne części. Jeśli chcemy wymienić teksty zawierające postać ogranicznika, musimy użyć backslash (\), aby uciec.
Rzućmy okiem na następujący przykład:
$ sed -i 's/\/bin \/bash/\/usr \/bin \/zsh/g' sed -praktyce.tekst
Tutaj zastępujemy/bin/bash/usr/bin/zsh. Sprawdź, czy próba się powiodła.
$ cat sed-praktyka.tekst
Używając tego zygzakowca wzoru do przodu i skrętów, może z łatwością stać się wyjątkowo mylące. Dlatego powszechną praktyką jest używanie innych ograniczeń, takich jak dwukropek (:) lub pasek pionowy (|). Przepiszmy polecenie za pomocą pionowego paska jako ogranicznika:
$ sed -i 's |/usr/bin/zsh |/bin/bash | g' sed -praktyka.tekst
Zestawy znaków Regex
Możemy użyć zestawów znaków, aby opisać zestaw znaków do zastąpienia w SED. Oto kilka typowych zestawów postaci, z którymi się spotkasz:
W poniższym przykładzie zastępujemy wszystkie cyfry alfabetem. Spójrz na następujący przykład:
$ echo 1001001 | sed -e 's | [0-9] | k | g'
Tutaj SED zastępuje wszystkie cyfry (w tym przypadku 1 i 0) znajduje się w liście k.
Co jeśli chcemy wymienić 1 na a i 0 na b? Oto jeden sposób na osiągnięcie tego:
$ echo 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'
Tutaj pierwsze polecenie SED zastępuje 1. Wyjście jest następnie przekładane do drugiego polecenia SED, które zastępuje 0 na b.
Wniosek
W tym przewodniku krótko pokazaliśmy różne sposoby wykorzystania SED do znalezienia i wymiany tekstów. Za pomocą Regex byliśmy w stanie dostroić wyszukiwanie i zastąpić dokładną zawartość. Dowiedz się więcej o wyrażeniu sed.
Za pomocą niektórych dodatkowych narzędzi, takich jak Find, możemy użyć SED do nawet rekurencyjnej modyfikacji plików całego katalogu.
Możemy również zaimplementować SED w skryptach Bash, aby wykonać bardziej złożoną edycję strumienia. Dowiedz się więcej o rozpoczęciu podróży z scenariuszem Bash.