Prawdziwy admin potrafi zmienić świat jedną komendą sed .

– Mądrość ludu z bash

Czym jest sed?

sed to edytor strumieniowy. Co to znaczy? To znaczy, że czyta tekst (z pliku lub ze standardowego wejścia) linia po linii, przetwarza go według podanych instrukcji, a następnie wypisuje wynik na standardowe wyjście. Ważne: domyślnie sed nie modyfikuje oryginalnego pliku! Wynik jest drukowany na ekranie, co daje Ci szansę sprawdzić, czy nie zrobiłeś bałaganu.

Podstawowa składnia: sed ‘adres_polecenie’ plik

Większość operacji w sed wymaga określenia:

  • adresu (które linie mają zostać zmodyfikowane – opcjonalnie, jeśli brak, to wszystkie)
  • polecenia (co ma zostać zrobione z tekstem)
sed [opcje] 'polecenie' plik

Podstawowe operacje: Działamy na tekście!

Zamiana tekstu (s – substitution): Najpopularniejszy trik

To jest to, co ludzie robią przy pomocy sed najczęściej – zamieniają jedno słowo na drugie.

# Podstawowa zamiana: `s/stary/nowy/` zamieni TYLKO pierwsze wystąpienie "stary" w każdej linii

sed 's/stary/nowy/' plik.txt

# Globalna zamiana: `s/stary/nowy/g` zamieni WSZYSTKIE wystąpienia "stary" w każdej linii (`g` jak global)

sed 's/stary/nowy/g' plik.txt

# Zamiana tylko drugiego wystąpienia w linii: `s/stary/nowy/2`

sed 's/stary/nowy/2' plik.txt

A teraz wisienka na torcie – jak zapisać zmiany do pliku!

# OSTRZEŻENIE! To nadpisuje oryginalny plik. Używaj ostrożnie.

sed -i 's/stary/nowy/g' plik.txt

# Lepsza opcja: utwórz kopię zapasową oryginalnego pliku (`.bak`)

sed -i.bak 's/stary/nowy/g' plik.txt
<b><i>UWAGA</i></b>: Używanie flagi `-i` (in-place) jest super wygodne, ale też super niebezpieczne! Nadpisuje oryginalny plik bez pytania. ZAWSZE najpierw przetestuj swoje polecenie <b><i>sed</i></b> bez `-i` (lub z `-i.bak`), aby upewnić się, że robi dokładnie to, co chcesz. Nie ma Ctrl+Z dla nadpisanego pliku!

Wybór linii (adresowanie): Działaj precyzyjnie!

sed potrafi operować na konkretnych liniach lub zakresach linii.

# Wydrukuj TYLKO linię numer 5 (`-n` dla "suppress automatic printing", `p` dla "print")

sed -n '5p' plik.txt

# Wydrukuj zakres linii od 1 do 10

sed -n '1,10p' plik.txt

# Wydrukuj co drugą linię, zaczynając od pierwszej

sed -n '1~2p' plik.txt

# Wydrukuj linie od słowa "START" do słowa "END"

sed -n '/START/,/END/p' plik.txt

Usuwanie linii (d – delete): Gdy coś nie pasuje!

# Usuń linię numer 10

sed '10d' plik.txt

# Usuń linie od 5 do 15

sed '5,15d' plik.txt

# Usuń puste linie (`^$` to regex dla pustej linii)

sed '/^$/d' plik.txt

# Usuń wszystkie linie zawierające słowo "debug"

sed '/debug/d' plik.txt

Wyrażenia regularne w sed: Tutaj zaczyna się jazda!

Podobnie jak grep, sed potrafi wykorzystywać pełną moc wyrażeń regularnych. To pozwala na bardzo skomplikowane i precyzyjne modyfikacje tekstu.

# Usuń linie zaczynające się od "#" (komentarze)

sed '/^#/d' plik.txt

# Usuń linie zakończone spacją

sed '/ $/d' plik.txt

# Zamień wszystkie cyfry (0-9) na znak "X"

sed 's/[0-9]/X/g' plik.txt

# Maska adresów IP w logach: zastąp cały adres IP ciągiem [REDACTED]

sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[REDACTED]/g' access.log

Praktyczne przykłady z bezpieczeństwa: sed jako narzędzie stealth!

Czyszczenie logów przed udostępnieniem: Anonimizacja to podstawa!

# Usuń lub zamaskuj wrażliwe dane (hasła, tokeny, sekrety) z logów

sed -i -E 's/(password|token|secret)=[^& ]*/\1=***/gi' app.log

# Zastąp adresy IP wewnętrzne (np. z sieci 192.168.x.x) ogólnymi maskami

sed -i 's/192\.168\.[0-9]*\.[0-9]*/192.168.x.x/g' access.log

Przetwarzanie wielu plików: Szybki lifting całej paczki!

# Zastosuj komendę **sed** do wszystkich plików `.log` w bieżącym katalogu

for f in *.log; do
    sed -i 's/stary/nowy/g' "$f"
done

Łączenie poleceń (pipeline): sed jako ogniwo łańcucha!

sed świetnie współpracuje z innymi narzędziami w potokach.

# Wyciągnij błędy z logu (`grep`), usuń znaczniki czasu (**sed**), posortuj, zlicz unikalne, posortuj od największych

grep -i error server.log | sed 's/\[.*\] //' | sort | uniq -c | sort -rn

# Wyciągnij adresy IP z pliku (`grep`), posortuj, zlicz unikalne

grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq -c

Zaawansowane triki: Magia dla wtajemniczonych

Użycie & – odwołanie do dopasowanego tekstu

Symbol & w części zamieniającej odwołuje się do całego tekstu, który został dopasowany przez wyrażenie regularne.

# Otocz cały dopasowany tekst nawiasami kwadratowymi

echo "test" | sed 's/.*/[&]/'
# Wynik: [test]


# Dodaj prefix "[REDACTED]" przed każdym znalezionym słowem "ip"

sed 's/ip/[REDACTED] &/' plik.txt

Grupy przechwytujące (‘(…)’ i ‘\1’, ‘\2’): Manipuluj fragmentami!

Możesz “przechwytywać” fragmenty dopasowanego tekstu za pomocą nawiasów, a następnie odwoływać się do nich (\1, \2) w części zamieniającej.

# Odwróć kolejność słów oddzielonych dwukropkiem (zamień "słowo1:słowo2" na "słowo2:słowo1")

echo "foo:bar" | sed -E 's/([^:]+):(.+)/\2:\1/'
# Wynik: bar:foo

Operacje na wielu wzorcach: Jeden sed, wiele zadań!

Możesz wykonać wiele poleceń sed w jednym wywołaniu, oddzielając je średnikami lub używając -e.

# Usuń pierwszą i ostatnią linię pliku

sed '1d; $d' plik.txt

# To samo, ale bardziej czytelnie z `-e`

sed -e '1d' -e '$d' plik.txt

Podsumowanie: sed to Twój najlepszy przyjaciel!

sed to potężne, ale i niebezpieczne narzędzie. Opanowanie go to skok milowy w produktywności i umiejętnościach analitycznych w terminalu.

Kluczowe punkty do zapamiętania:

  • sed to edytor strumieniowy – modyfikuje tekst linia po linii, domyślnie wypisując na standardowe wyjście.
  • Flaga -i nadpisuje plik – używaj z największą ostrożnością!
  • Zamiana (s), usuwanie (d), adresowanie (linia,linia) to podstawa.
  • Wyrażenia regularne to turbo-doładowanie dla sed.
  • Idealny do masowych zmian, anonimizacji logów i skryptowania.
# Twój nowy zestaw do ogarniania masowych zmian:

find /var/log -name "*.log" | xargs sed -i.bak 's/hasło/***/g'

sed (Stream Editor) to potężny edytor strumieniowy, który pozwala na błyskawiczną modyfikację tekstu bez otwierania plików. Idealnie sprawdza się w automatyzacji, anonimizacji logów i masowych zamianach. Kluczowe funkcje to zamiana tekstu (s), usuwanie linii (d) oraz precyzyjne adresowanie zakresów, a wszystko to wspierane przez potęgę wyrażeń regularnych.

Kolejny odcinek: find + locate – wyruszymy na prawdziwe polowanie na pliki! Zostań z nami!