Sed (program) – Wiki

Sed (program)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji , szukaj

Sed (stream editor) – edytor strumieniowy zawarty w systemach Unixowych, służący do przetwarzania plików tekstowych. Łączy w sobie prostotę oraz szeroki wachlarz możliwości. Znajduje też zastosowanie przy pisaniu programów konwertujących. Pomimo, że w sedzie nie możemy używać zmiennych, jest on językiem programowania zupełnym w sensie Turinga .

Spis treści

[ edytuj ] Powiązania oraz Historia

Sed jest jednym z pierwszych poleceń systemów Unixowych, polegającym na przetwarzaniu strumieni tekstowych. Wyewoluował z polecenia grep , jego składnia oparta jest na programie ed , swoimi możliwościami zbliżony jest do AWK . Zarówno Sed, jak i AWK, uznawane są za inspirację Perla . Istnieje rozszerzenie Super-sed zawierające wyrażenia regularne kompatybilne z Pearlem (między innymi s/// jest jednym z poleceń Perla). W dniu dzisiejszym, program sed jest standardowo dostępny w większości systemów operacyjnych. Został stworzony w 1973 roku przez Lee E. McMahona dla organizacji Bell Labs. Innym wariantem seda jest minised, wprowadzony przez Erica S. Raymonda, obecnie prowadzony przez René Rebe. Zawiera on kilka rozszerzeń BSD, jednak całokształt nie jest tak rozbudowany, jak standardowy sed. Jego zaletą jest szybkość oraz to, że zużywa mało pamięci.

[ edytuj ] Składnia

Opcje, z którymi można uruchomić program:

  • -n - na wyjściu będą wypisywane jedynie linie, na których wykonano komendę 'p' lub 's' z parametrem 'p'.
  • -e - stosujemy, gdy przetwarzamy wiele poleceń lub skryptów.
  • -f - dzięki temu argumentowi, wczytujemy komendy z pliku.
  • -v - wyświetlenie informacji o programie.
  • -t - wyłączenie wyjścia z istotnych komend powłoki, które są wykonywane.
  • -q - likwiduje ostrzeżenia o rezultatach podstawienia.
  • -i - włącza tryb interaktywny, w którym użytkownik musi zatwierdzić każdą operację.
  • -b - zapisanie kopii zapasowej oryginalnego pliku.

Użycie seda za pośrednictwem konsoli:

sed 's/wyraz1/wyraz2/' plik1

Wtedy w pliku 'plik1', w każdym wierszu pierwsze wystąpienie ciągu znaków 'wyraz1' zostanie zastąpione przez 'wyraz2'.

Jeżeli chcemy, aby zamiana nie dotyczyła tylko pierwszego, a wszystkich wystąpień w wierszu, musimy użyć 'g' oznaczające wystąpienia globalne:

sed 's/wyraz1/wyraz2/g' plik1

W przypadku, gdy chcemy zapisać zmiany do pliku o nazwie 'plik2':

sed 's/wyraz1/wyraz2/g' plik1 > plik2

Możemy również użyć komendy bezpośrednio w pliku:

echo "tekst do przetworzenia" | sed "s/do przetworzenia/przetworzony/"

Jeżeli chcemy użyć kilka razy seda na jednym tekście, możemy zamiast:

sed 's/wyraz1/wyraz2/' | sed 's/wyraz3/wyraz4/' | sed 's/wyraz5/wyraz6/'

użyć polecenia tylko raz, a następne poprzedzać jedynie średnikiem:

sed -e 's/wyraz1/wyraz2/;s/wyraz3/wyraz4/;s/wyraz5/wyraz6/'

Podczas wyszukiwania wzorca, możemy skorzystać ze znaków specjalnych:

Znak Znaczenie Przykład użycia
^ Początek wiersza /^slowo/ - Wiersz zaczynający sie od 'slowo'
$ Koniec wiersza /^$/ - Wiersz pusty
. Pojedynczy znak /./ - Wiersz zawierający co najmniej jeden znak
* Zero lub więcej wystąpień poprzedniego znaku / */ - Wiersz zawierający dwie lub więcej sąsiaspacji
[ ] Wszystkie znaki pomiędzy '[' i ']' /[abc]/ - Wiersz zawierający 'a', 'b' lub 'c'

Również ze względu na ich uniwersalność, w dobrym tonie jest używanie klas znakowych podczas wyszukiwania wzorca.

Klasa znakowa Znaczenie
[:alnum:] Znaki alfanumeryczne [a-z A-Z 0-9]
[:alpha:] Znaki alfabetyczne [a-z A-Z]
[:blank:] Spacje lub tabulatory
[:cntrl:] Dowolny znak kontrolny
[:digit:] Cyfry [0-9]
[:graph:] Znaki drukowalne (bez odstępów)
[:lower:] Małe litery [a-z]
[:print:] Znaki drukowalne z odstępami
[:punct:] Znaki drukowalne z wyjątkiem odstępów, liter i cyfr
[:space:] Wszystkie znaki odstępu
[:upper:] Duże litery [A-Z]
[:xdigit:] Cyfry w systemie szesnastkowym [0-9 a-f A-F]

[ edytuj ] Użyteczne przykłady

Każdy wiersz rozpoczyna się od wielkiej litery:

sed -e 's/./\u&/'

Zamienianie wszystkich małych liter na wielkie:

sed -e 's/[a-z]/[A-Z]/g'

Zamienianie wszystkich małych liter na wielkie z użyciem klas znakowych:

sed -e 's/[:lower:]/[:upper:]/g'

Usunięcie w całym tekście ciągu znaków 'dousuniecia':

sed -e 's/dousuniecia//g'

Usunięcie całego wiersza zawierającego ciąg znaków 'dousuniecia':

sed '/dousuniecia/d'

Usunięcie nagłówka wypisywanego przez polecenie ps:

ps ax | sed 1d

Wyświetlenie wszystkich znaków od słowa 'poczatek' do słowa 'koniec':

sed -n '/poczatek/, /koniec/p'

Jeżeli wzorce pojawią się więcej, niż jeden raz, wyświetlane będą przedziały.

Wyświetlanie wyłącznie linii rozpoczynających się od 'wyraz':

sed -n '/^wyraz/p'

Numerowanie linii w pliku 'plik1':

sed = plik1 | sed 'N;s/\n/\t/'

Usunięcie białych znaków znajdujących się na końcu każdego wiersza:

sed 's/[ \t]*$//' 

Odwrócenie kolejności wierszy:

sed '1!G;h;$!d'

Wyświetlenie ostatnich dziesięciu wierszy:

sed -e :a -e '$q;N;11, $D;ba'

Wyświetlenie pierwszych dziesięciu wierszy:

sed 10q

Odwrócenie kolejności znaków w każdej linii:

sed '/\n/!G;s/\(.\)\(.*\n\)/&
		

Sed (program)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji , szukaj

Sed (stream editor) – edytor strumieniowy zawarty w systemach Unixowych, służący do przetwarzania plików tekstowych. Łączy w sobie prostotę oraz szeroki wachlarz możliwości. Znajduje też zastosowanie przy pisaniu programów konwertujących. Pomimo, że w sedzie nie możemy używać zmiennych, jest on językiem programowania zupełnym w sensie Turinga .

Spis treści

[ edytuj ] Powiązania oraz Historia

Sed jest jednym z pierwszych poleceń systemów Unixowych, polegającym na przetwarzaniu strumieni tekstowych. Wyewoluował z polecenia grep , jego składnia oparta jest na programie ed , swoimi możliwościami zbliżony jest do AWK . Zarówno Sed, jak i AWK, uznawane są za inspirację Perla . Istnieje rozszerzenie Super-sed zawierające wyrażenia regularne kompatybilne z Pearlem (między innymi s/// jest jednym z poleceń Perla). W dniu dzisiejszym, program sed jest standardowo dostępny w większości systemów operacyjnych. Został stworzony w 1973 roku przez Lee E. McMahona dla organizacji Bell Labs. Innym wariantem seda jest minised, wprowadzony przez Erica S. Raymonda, obecnie prowadzony przez René Rebe. Zawiera on kilka rozszerzeń BSD, jednak całokształt nie jest tak rozbudowany, jak standardowy sed. Jego zaletą jest szybkość oraz to, że zużywa mało pamięci.

[ edytuj ] Składnia

Opcje, z którymi można uruchomić program:

  • -n - na wyjściu będą wypisywane jedynie linie, na których wykonano komendę 'p' lub 's' z parametrem 'p'.
  • -e - stosujemy, gdy przetwarzamy wiele poleceń lub skryptów.
  • -f - dzięki temu argumentowi, wczytujemy komendy z pliku.
  • -v - wyświetlenie informacji o programie.
  • -t - wyłączenie wyjścia z istotnych komend powłoki, które są wykonywane.
  • -q - likwiduje ostrzeżenia o rezultatach podstawienia.
  • -i - włącza tryb interaktywny, w którym użytkownik musi zatwierdzić każdą operację.
  • -b - zapisanie kopii zapasowej oryginalnego pliku.

Użycie seda za pośrednictwem konsoli:

sed 's/wyraz1/wyraz2/' plik1

Wtedy w pliku 'plik1', w każdym wierszu pierwsze wystąpienie ciągu znaków 'wyraz1' zostanie zastąpione przez 'wyraz2'.

Jeżeli chcemy, aby zamiana nie dotyczyła tylko pierwszego, a wszystkich wystąpień w wierszu, musimy użyć 'g' oznaczające wystąpienia globalne:

sed 's/wyraz1/wyraz2/g' plik1

W przypadku, gdy chcemy zapisać zmiany do pliku o nazwie 'plik2':

sed 's/wyraz1/wyraz2/g' plik1 > plik2

Możemy również użyć komendy bezpośrednio w pliku:

echo "tekst do przetworzenia" | sed "s/do przetworzenia/przetworzony/"

Jeżeli chcemy użyć kilka razy seda na jednym tekście, możemy zamiast:

sed 's/wyraz1/wyraz2/' | sed 's/wyraz3/wyraz4/' | sed 's/wyraz5/wyraz6/'

użyć polecenia tylko raz, a następne poprzedzać jedynie średnikiem:

sed -e 's/wyraz1/wyraz2/;s/wyraz3/wyraz4/;s/wyraz5/wyraz6/'

Podczas wyszukiwania wzorca, możemy skorzystać ze znaków specjalnych:

Znak Znaczenie Przykład użycia
^ Początek wiersza /^slowo/ - Wiersz zaczynający sie od 'slowo'
$ Koniec wiersza /^$/ - Wiersz pusty
. Pojedynczy znak /./ - Wiersz zawierający co najmniej jeden znak
* Zero lub więcej wystąpień poprzedniego znaku / */ - Wiersz zawierający dwie lub więcej sąsiaspacji
[ ] Wszystkie znaki pomiędzy '[' i ']' /[abc]/ - Wiersz zawierający 'a', 'b' lub 'c'

Również ze względu na ich uniwersalność, w dobrym tonie jest używanie klas znakowych podczas wyszukiwania wzorca.

Klasa znakowa Znaczenie
[:alnum:] Znaki alfanumeryczne [a-z A-Z 0-9]
[:alpha:] Znaki alfabetyczne [a-z A-Z]
[:blank:] Spacje lub tabulatory
[:cntrl:] Dowolny znak kontrolny
[:digit:] Cyfry [0-9]
[:graph:] Znaki drukowalne (bez odstępów)
[:lower:] Małe litery [a-z]
[:print:] Znaki drukowalne z odstępami
[:punct:] Znaki drukowalne z wyjątkiem odstępów, liter i cyfr
[:space:] Wszystkie znaki odstępu
[:upper:] Duże litery [A-Z]
[:xdigit:] Cyfry w systemie szesnastkowym [0-9 a-f A-F]

[ edytuj ] Użyteczne przykłady

Każdy wiersz rozpoczyna się od wielkiej litery:

sed -e 's/./\u&/'

Zamienianie wszystkich małych liter na wielkie:

sed -e 's/[a-z]/[A-Z]/g'

Zamienianie wszystkich małych liter na wielkie z użyciem klas znakowych:

sed -e 's/[:lower:]/[:upper:]/g'

Usunięcie w całym tekście ciągu znaków 'dousuniecia':

sed -e 's/dousuniecia//g'

Usunięcie całego wiersza zawierającego ciąg znaków 'dousuniecia':

sed '/dousuniecia/d'

Usunięcie nagłówka wypisywanego przez polecenie ps:

ps ax | sed 1d

Wyświetlenie wszystkich znaków od słowa 'poczatek' do słowa 'koniec':

sed -n '/poczatek/,/koniec/p'

Jeżeli wzorce pojawią się więcej, niż jeden raz, wyświetlane będą przedziały.

Wyświetlanie wyłącznie linii rozpoczynających się od 'wyraz':

sed -n '/^wyraz/p'

Numerowanie linii w pliku 'plik1':

sed = plik1 | sed 'N;s/\n/\t/'

Usunięcie białych znaków znajdujących się na końcu każdego wiersza:

sed 's/[ \t]*$//' 

Odwrócenie kolejności wierszy:

sed '1!G;h;$!d'

Wyświetlenie ostatnich dziesięciu wierszy:

sed -e :a -e '$q;N;11,$D;ba'

Wyświetlenie pierwszych dziesięciu wierszy:

sed 10q

Odwrócenie kolejności znaków w każdej linii:

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

[ edytuj ] Powiązane hasła

[ edytuj ] Linki


Walka na noże w amerykańskiej kampanii prezydenckiej
Zaostrza się kampania prezydencka w USA, pełna wzajemnych oskarżeń i ataków personalnych. Prezydent Barack Obama określa swego republikańskiego oponenta Mitta Romney'a mianem bezlitosnego kapitalisty, Romney natomiast oskarża go o powiększenie długu publicznego.



Największe organizacje lekarzy powołały sztab kryzysowy
Najważniejsze organizacje lekarskie w Polsce powołały sztab kryzysowy. Wezwał on medyków i świadczeniodawców do niepodpisywania umów z NFZ na wystawianie recept refundowanych.



Nowy wiersz Grassa, tym razem na temat Grecji
W niecałe dwa miesiące po opublikowaniu krytykującego Izrael wiersza niemiecki laureat literackiej nagrody Nobla Guenter Grass ponownie wdał się w poetycką polemikę na aktualny polityczny temat - tym razem postępowania UE wobec pogrążonej w kryzysie Grecji.



Odwrócenie trendów? PO już nie traci
Platforma Obywatelska zyskuje na poparciu, PiS traci. Różnica między tymi partiami wynosi 10 procent - takie są wyniki najnowszego sondażu telefonicznego TNS Polska dla programu Forum w Telewizji Polskiej.



Kombatanci upokorzeni na granicy? PiS interweniuje
Klub Parlamentarny PiS domaga się od premiera reakcji na potraktowanie kombatantów na granicy polsko-białoruskiej. Weterani, którzy jechali do Polski na zjazd łagierników-żołnierzy AK, zostali - według PiS - upokorzeni przez polską Straż Graniczną.



Home Page , , , , , , , , , , , , , , , ,, , ,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,, , , , ,, , ,, , , , , , , , , , , , , , , , , , , , ,, , , , , , , , , , , , , , , ,, , ,, , , , , , , , , , ,, , , , , , , , , ,, , , , , , , , , , ,, , , , , , , ,, , , , , , , , , , ,, , , , , , , , , ,, , , , , , , , , , ,, , , , ,, , ,, , , , , , , , , , , , , , , , , , , , ,, , , , , , , , , , ,, , , , ,, , ,, , , , , , , , , , ,, , , , , , , , , ,, , , , , , , , , , ,, , , , , , , ,, , , , , , , , , , ,, , , , , , , , , ,, , , , , , , , , , ,, , , , ,, , ,, , , , , , , , , , ,, , , , , , , , , , class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-Sed_program skin-vector action-view vector-animateLayout"/;//D;s/.//'

[ edytuj ] Powiązane hasła

[ edytuj ] Linki


Walka na noże w amerykańskiej kampanii prezydenckiej
Zaostrza się kampania prezydencka w USA, pełna wzajemnych oskarżeń i ataków personalnych. Prezydent Barack Obama określa swego republikańskiego oponenta Mitta Romney'a mianem bezlitosnego kapitalisty, Romney natomiast oskarża go o powiększenie długu publicznego.



Największe organizacje lekarzy powołały sztab kryzysowy
Najważniejsze organizacje lekarskie w Polsce powołały sztab kryzysowy. Wezwał on medyków i świadczeniodawców do niepodpisywania umów z NFZ na wystawianie recept refundowanych.



Nowy wiersz Grassa, tym razem na temat Grecji
W niecałe dwa miesiące po opublikowaniu krytykującego Izrael wiersza niemiecki laureat literackiej nagrody Nobla Guenter Grass ponownie wdał się w poetycką polemikę na aktualny polityczny temat - tym razem postępowania UE wobec pogrążonej w kryzysie Grecji.



Odwrócenie trendów? PO już nie traci
Platforma Obywatelska zyskuje na poparciu, PiS traci. Różnica między tymi partiami wynosi 10 procent - takie są wyniki najnowszego sondażu telefonicznego TNS Polska dla programu Forum w Telewizji Polskiej.



Kombatanci upokorzeni na granicy? PiS interweniuje
Klub Parlamentarny PiS domaga się od premiera reakcji na potraktowanie kombatantów na granicy polsko-białoruskiej. Weterani, którzy jechali do Polski na zjazd łagierników-żołnierzy AK, zostali - według PiS - upokorzeni przez polską Straż Graniczną.



Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,