SED Regex Wymień

SED Regex Wymień

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:

  • -I: Domyślnym zachowaniem SED jest zapisanie danych wyjściowych do stdout (standardowe wyjście). Jednak ta flaga mówi SED, aby zamiast tego edytować pliki (ów). Jeśli podano również rozszerzenie (na przykład -i.bak), tworzona jest kopia zapasowa oryginalnego pliku.
  • S: Instruuje SED, aby wykonał operację zastępczą na danym strumieniu.
  • /: Postać delimitera.
  • : Wyrażenie regularne dla SED do dopasowania na danym strumieniu.
  • : Ciąg zastępczy.
  • G: Flag instruujący SED, aby wykonał globalny zamiennik. Domyślnie SED pasuje tylko i zastępuje pierwszą instancję.

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:

  • [A-Z]: Wszystkie małe alfabety.
  • [A-Z]: Wszystkie wielkie alfabety.
  • [0-9]: Wszystkie cyfry.

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.