Edytor strumienia - przepływ pracy

W tym rozdziale zbadamy, jak dokładnie działa SED. Aby zostać ekspertem w SED, trzeba znać jego cechy wewnętrzne. SED jest zgodny z prostym przepływem pracy: odczyt, wykonanie i wyświetlanie. Poniższy diagram przedstawia przepływ pracy.

  • Read: SED odczytuje wiersz ze strumienia wejściowego (plik, potok lub stdin) i zapisuje go w swoim wewnętrznym buforze o nazwie pattern buffer.

  • Execute: Wszystkie polecenia SED są stosowane sekwencyjnie w buforze wzorców. Domyślnie polecenia SED są stosowane do wszystkich linii (globalnie), chyba że określono adresowanie linii.

  • Display: Wyślij (zmodyfikowaną) zawartość do strumienia wyjściowego. Po wysłaniu danych bufor wzorców będzie pusty.

  • Powyższy proces powtarza się do wyczerpania pliku.

Zwraca uwagę

  • Bufor wzorców to prywatny, ulotny obszar pamięci w pamięci używany przez dysk SED.

  • Domyślnie wszystkie polecenia SED są stosowane w buforze wzorców, dlatego plik wejściowy pozostaje niezmieniony. GNU SED umożliwia modyfikację pliku wejściowego w miejscu. Omówimy to w dalszych sekcjach.

  • Jest inny obszar pamięci o nazwie hold bufferktóry jest również prywatnym, ulotnym obszarem przechowywania w pamięci. Dane mogą być przechowywane w buforze do późniejszego odtworzenia. Pod koniec każdego cyklu SED usuwa zawartość buforu wzorców, ale zawartość bufora wstrzymującego pozostaje trwała między cyklami SED. Jednak polecenia SED nie mogą być wykonywane bezpośrednio w buforze wstrzymania, dlatego SED umożliwia przenoszenie danych między buforem wstrzymania a buforem wzorców.

  • Początkowo oba bufory wzorca i wstrzymania są puste.

  • Jeśli nie podano plików wejściowych, SED akceptuje dane wejściowe ze standardowego strumienia wejściowego (stdin).

  • Jeśli zakres adresów nie jest podany domyślnie, SED działa w każdej linii.

Przykłady

Stwórzmy plik tekstowy quote.txt zawierać cytat ze słynnego autora Paulo Coelho.

[jerry]$ vi quote.txt 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

Aby zrozumieć przepływ pracy SED, wyświetlmy zawartość pliku quote.txt za pomocą SED. Ten przykład symulujecat Komenda.

[jerry]$ sed '' quote.txt

Wykonanie powyższego kodu da następujący wynik.

There is only one thing that makes a dream impossible to achieve: the fear of failure.

W powyższym przykładzie quote.txt jest nazwą pliku wejściowego, a przed nim znajduje się para pojedynczych cudzysłowów, które implikują polecenie SED. Pozwól nam zdemistyfikować tę operację.

Najpierw SED odczytuje wiersz z pliku wejściowego quote.txt i zapisuje go w swoim buforze wzorców. Następnie stosuje polecenia SED w buforze wzorców. W naszym przypadku nie ma żadnych poleceń SED, dlatego na buforze wzorców nie jest wykonywana żadna operacja. Wreszcie usuwa i drukuje zawartość bufora wzorców na standardowym wyjściu. Czy to nie jest proste?

W poniższym przykładzie SED akceptuje dane wejściowe ze standardowego strumienia wejściowego.

[jerry]$ sed '' 
       
      

Wykonanie powyższego kodu da następujący wynik.

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure.

Tutaj pierwsza linia jest wprowadzana za pomocą klawiatury, a druga to wyjście wygenerowane przez SED. Aby wyjść z sesji SED, naciśnij ctrl-D (^ D).