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).