[BASH] Wyjaśnienie polecenia sed

0

Witam, chciałbym żeby ktoś kto potrafi bash'a wyjaśnił mi polecenie, oczywiście tych, którzy chcą ponarzekać to nie tutaj.

sed -e '$p ' -e '/\.[a-z]\{3\}/d'

Wiem, że /d usuwa to co jest przed nim...

Jeśli ktoś miałby chwilę i wyjaśnił po kolei co znaczy polecenie byłby wdzięczny :)

2

Flaga -e oznacza, że ma zostać wykonane to co jest przekazane jako parametr ("Append the editing commands specified by the command argument to the list of commands."). Więc masz tutaj 2 polecenia:

  • $p (spacja jest pomijana w tym wypadku), które ma wypisać (p) wartość pod adresem $, czyli ostatnią linię wejścia
  • /\.[a-z]\{3\}/d, które usuwa (d, w przeciwieństwie do tego co napisałeś, to poleceniem do usuwania jest samo d nie /d) pod adresem /\.[a-z]\{3\}/, czyli inaczej mówiąc ma usunąć linie w których to wyrażenie regularne będzie dopasowane

Samo wyrażenie regularne jest zamknięte wewnątrz // i oznacza:

  • \. dopasuj faktyczną kropkę (samo . oznacza dowolny znak)
  • [a-z] dowolny znak w grupie, w tym wypadku litery od a do z (ale tylko małe litery)
  • \{3\} powtórz poprzednie dopasowanie 3 razy (jako grupę, nie wynik)

Czyli inaczej mówiąc, usuń wszystkie linie, w których jest kropka, po której występują 3 małe litery.

Więc całe polecenie zrobi tyle co:

  • wypisze ostatnią linię wejścia
  • usunie wszystkie linie zawierające .xxx gdzie x to dowolna mała litera.
0

title

Czyli usuwa tak jakby zdania niepoprawnie zapisane tak jak na ss'ie (po kropce dajemy spacje :)).
To 3\ to jest minimum 3 małe litery?
A -e '$p' jest odpowiedzialne za wypisanie ostatniej linii?
Chcę się upewnić, jeśli coś źle napisałem to proszę poprawić ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1