sed
Ostatnio dużo widuję i wydaje mi się, że jest to dość mylące polecenie. Strony nie były szczególnie pomocne, ale wiem, że można ich użyć do analizy wyników innych poleceń.
Czym dokładnie jest sed
i do czego służy? Szukam wyczerpującej odpowiedzi obejmującej to sed
, czym jest, do czego jest powszechnie używana oraz kilka podstawowych przykładów / składni.
command-line
sed
Seth
źródło
źródło
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
ma o wiele więcej niżman sed
. Potem/usr/share/doc/sed
jestsedfaq.txt.gz
.Odpowiedzi:
W podstawowym użyciu służy do „wyszukiwania i zamiany” na ciągi znaków.
echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'
zwroty
"The quick brown fox jumps over the lazy cat"
Sed naprawdę świeci, gdy używa się z nim wyrażeń regularnych.
Może chcesz przyjrzeć się tym artykułem o
sed
jego dość wyczerpujące.źródło
Definicje
Unix System V: praktyczny przewodnik , książka Marka Sobella:
Strona podręcznika dla sed (GNU sed) 4.2.2:
Moja nieformalna definicja:
Sed
(skrót od stream editor ) to narzędzie do przetwarzania tekstu, które zostało opracowane w czasie, gdy tekst był przetwarzany jeden wiersz na raz, ale pozostaje jednym z najpotężniejszych narzędzi Unix / Linux; jednocześnie jest to forma języka skryptowego, zaprojektowana specjalnie do przetwarzania tekstu.Używa
Jak sugerują definicje,
sed
służy do przetwarzania wsadowego wierszy tekstu, plików tekstowych i strumieniowych strumieni tekstu. Najczęściej służy do zastępowania i usuwania tekstu:Można go jednak również wykorzystać do naśladowania zachowania innych poleceń.
dmesg | head -n 3
(drukowanie pierwszych 3 wierszy), możemy to zrobićdmesg | sed -n 1,3p
.dmesg | grep 'wlan0'
(szukanie łańcucha), możemy to zrobićdmesg | sed -n '/wlan0/p'
Dużą przewagą
sed
nad innymi narzędziami do przetwarzania tekstu jest-i
flaga, co oznacza, że nie możemy po prostu wyprowadzić edytowanego tekstu na ekran, ale faktycznie zapisać edycję w oryginalnym pliku.awk
smaki, przeciwnie, mają taką funkcję tylko wGNU awk
wersji.sed
może pobierać dane z wiersza poleceń, z wieloma wzorami oddzielonymi średnikiem (;
) lub z pliku skryptu określonego po-f
flagi, np.cat someTextfile.txt | sed -f myScript.sed
Aplikacje Sed i przykłady
Jednowarstwowe sed
Manipulacja tekstem za pomocą sed, Linux Journal
sed - 20 przykładów usuwania / usuwania znaków z pliku
Sed Script - Odwracanie nazw
Jak mogę zamienić ciąg w pliku (plikach)?
Jak mogę usunąć co drugą linię pliku?
źródło
sed
to potężne polecenie, które umożliwia tworzenie rzeczy (usuwanie linii, podstawianie ciągów, filtrowanie ciągów itp.).Mógłbym podać listę zastosowań z argumentami, ale internet jest tego pełen. Wyszukiwanie
sed usage by examples
przyniosło mi wiele wyników, ten uroczy: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/źródło
Ta odpowiedź jest w toku - brakuje więcej przykładów na temat polecenia susbstitute
Co to jest
sed
?sed
= Edytor strumieniaOpis na stronie podręcznika
sed
raportów GNU 4.2.2:Opis na stronie GNU
sed
na gnu.org donosi:Do czego
sed
służy?Można go używać do wykonywania złożonych modyfikacji strumieni danych (zwykle tekstu, ale można go również modyfikować dane binarne).
Do najczęstszych przypadków użycia należą:
Są to przypadki użycia ujęte w tej odpowiedzi.
Stosowanie
sed
odczytuje dane wejściowe z pliku przechowywanego w systemie plików, jeśli nazwa pliku jest podana w argumentach wiersza poleceń podczas jego wywoływania, lubstdin
jeśli nie podano nazwy pliku.Minimalne wywołanie przy użyciu pliku przechowywanego w systemie plików:
Minimalne wywołanie przy użyciu
stdin
:Witaj świecie!
sed
domyślnie czyta plik wejściowy wiersz po wierszu; czyta jedną linię, usuwa końcową nową linię i umieszcza przetworzoną linię w „przestrzeni wzorów”; na koniec wykonuje wymienione polecenia na bieżącej zawartości obszaru wzorców i odczytuje nowy wiersz z pliku wejściowego.Kiedy komenda nie jest określona lub gdy
p
albod
komenda jest określona *,sed
zawsze będzie wydrukować bieżącą zawartość przestrzeni wzoru zakończoną nową linią przy każdej iteracji niezależnie:Aby temu zapobiec, można wywołać
sed
wraz z-n
przełącznikiem:* Mówiąc tylko dla
p
,d
is
poleceń, które są polecenia opisane w niniejszej odpowiedzi.Wybór linii
sed
może przetwarzać cały plik wejściowy lub przetwarzać tylko wybrane wiersze pliku wejściowego; wybór wierszy pliku wejściowego do przetworzenia odbywa się poprzez określenie „adresów”; adres może być (między innymi) numerem linii lub wzorem; zakresy wierszy można wybrać, określając zakresy adresów.Możliwe kombinacje adresów to:
<N>
(gdzie<N>
jest liczbą): następujące polecenie / polecenia będą wykonywane tylko na numerze wiersza<N>
;<N>,<M>
(gdzie<N>
i<M>
są dwiema liczbami,<N>
><M>
): następujące polecenia / polecenia będą wykonywane na liniach od numeru<N>
linii do numeru linii<M>
włącznie;/<pattern>/
(gdzie<pattern>
jest podstawowym lub rozszerzonym wyrażeniem regularnym): następujące polecenie / polecenia będą wykonywane tylko w wierszach zawierających wystąpienie<pattern>
;/<pattern1>/,/<pattern2>/
(gdzie<pattern1>
i<pattern2>
są podstawowe lub rozszerzone wyrażenia regularne) następujące polecenie / polecenia będą wykonywane na liniach, począwszy od pierwszego wiersza zawierającego wystąpienie<pattern1>
do następnego wiersza zawierającego wystąpienie<pattern2>
, wiele razy w przypadku wielokrotności zamawiać<pattern1>
-<pattern2>
occurences;<N>,/pattern/
(gdzie<N>
jest liczbą i<pattern>
jest podstawowym lub rozszerzonym wyrażeniem regularnym): następujące polecenia / polecenia będą wykonywane w wierszach od numeru linii<N>
do pierwszego wiersza zawierającego wystąpienie<pattern>
;/pattern/,<N>
(gdzie<pattern>
jest podstawowym lub rozszerzonym wyrażeniem regularnym i<N>
jest liczbą): następujące polecenia / polecenia będą wykonywane w wierszach od pierwszego wiersza zawierającego wystąpienie<pattern>
do numeru wiersza<N>
;Wybór dokonany w celu wydrukowania, usunięcia lub wykonania podstawień w zakresach linii zawsze będzie obejmować linie pasujące do określonych adresów; ponadto wybór dokonany w celu wydrukowania, usunięcia lub wykonania podstawień na zakresach linii za pomocą wzorów jest leniwy i globalny (tj. każdy objęty zakresem będzie zawsze najmniejszy, jak to możliwe, i wpłynie to na wiele zakresów).
Podczas drukowania zakresów wierszy lub drukowania tylko wierszy, na których przeprowadzono zamianę, konieczne jest wywołanie
sed
wraz z-n
przełącznikiem, aby nie dopuścić do tego, aby wiersze pasujące do kryterium były drukowane dwukrotnie (dzieje się tak tylko podczas drukowania zakresów wierszy) i w kolejności aby uniemożliwić wydrukowanie wierszy niezgodnych z kryterium, które ma zostać wydrukowane.Po wyborze wierszy do przetworzenia musi następować polecenie lub wiele poleceń oddzielonych średnikami zgrupowanych za pomocą nawiasów klamrowych.
Polecenia: drukuj, usuwaj
Polecenia użyte do wydrukowania lub usunięcia zaznaczenia to odpowiednio:
p
: drukuje wiersze pasujące do określonego adresu / zakresu adresów;d
: usuwa wiersze pasujące do określonego adresu / zakresu adresów;Gdy jedno z tych poleceń nie jest poprzedzone adresem / wyborem, polecenie jest wykonywane globalnie, tj. W każdym wierszu pliku wejściowego.
Przykłady: wydrukuj, usuń
Drukowanie / usuwanie wierszy określających adresy numeryczne:
Przykładowy plik:
<N>
:<N>
:<N>
do druku<M>
włącznie:<N>
do<M>
włącznie:Drukowanie / usuwanie linii określających wzory:
Przykładowy plik:
<pattern>
:<pattern>
:<pattern1>
do dopasowania linii<pattern2>
włącznie:<pattern1>
do dopasowania linii<pattern2>
włącznie:Polecenie: zastępstwo
Polecenie użyte do wykonania podstawienia zaznaczenia to:
s
: zastępuje wiersze pasujące do określonego adresu / zakresu adresów;Gdy to polecenie nie jest poprzedzone adresem / wyborem, polecenie jest wykonywane globalnie, tj. W każdym wierszu pliku wejściowego.
Składnia
s
polecenia jest następująca:Ukośniki to „ograniczniki”; stosuje się je, aby oddzielić
<pattern>
,<replacement_string>
a<pattern_flags>
odcinki;Separator to zawsze znak bezpośrednio po
s
poleceniu; może być ustawiony na dowolny inny znak, na przykład|
:<pattern>
jest podstawowym lub rozszerzonym wyrażeniem regularnym;<replacement_string>
jest stałym ciągiem, który może zawieraćsed
-specyficzne sekwencje o specjalnym znaczeniu;<pattern_flags>
to lista flag, które modyfikują zachowanie<pattern>
.Najczęściej występujące
sed
sekwencje o specjalnym znaczeniu:&
: odniesienie wsteczne zastąpione ciągiem dopasowanym przez<pattern>
;\<N>
(gdzie<N>
jest liczbą): odniesienie wsteczne zastąpione<N>
grupą przechwyconą<pattern>
;Najpopularniejsze flagi:
g
: wymusza<pattern>
globalne dopasowanie, tj. wiele razy w każdej linii;i
: wymusza<pattern>
dopasowanie bez rozróżniania wielkości liter;p
: drukuje linie, na których dokonano podstawienia jeszcze raz (przydatne, gdy używasz wywołania-n
przełącznikased
do drukowania tylko linii, na których przeprowadzono podstawienie);Przykłady: zamiennik
Przykładowy plik:
<pattern>
z<replacement_string>
każdej linii:<pattern>
w<replacement_string>
każdej linii:<pattern1>
i zastąpienie wszystkich wystąpień<pattern2>
z<replacement_string>
:<pattern1>
i zastąpienie wszystkich wystąpień<pattern2>
z<replacement_string>
:źródło