Wstęp
- 3512
- 1034
- Juliusz Janicki
Witamy w drugiej części naszej serii, część, która skupi się na SED, wersji GNU. Jak zobaczysz, istnieje kilka wariantów SED, które są dostępne dla kilku platform, ale skupimy się na wersjach GNU SED 4.X. Wielu z was już słyszało o SED i już go używało, głównie jako narzędzie zastępcze. Ale to tylko segment tego, co SED może zrobić, a my dołożymy wszelkich starań, aby pokazać wam jak najwięcej tego, co możesz z tym zrobić. Nazwa oznacza edytor strumienia, a tutaj „Stream” może być plik, rurą lub po prostu stdin. Oczekujemy, że będziesz mieć podstawową wiedzę Linuksa, a jeśli już pracowałeś z wyrażeniami regularnymi lub przynajmniej wiesz, czym jest Regexp, tym lepiej. Nie mamy miejsca na pełny samouczek w wyrażeniach, więc zamiast tego damy tylko podstawowy pomysł i wiele przykładów SED. Istnieje wiele dokumentów dotyczących tego tematu, a nawet będziemy mieć zalecenia, jak zobaczysz za minutę.
Instalacja
Nie ma tu wiele do powiedzenia, ponieważ masz już zainstalowane SED, ponieważ jest używany w różnych skryptach systemowych i nieocenionym narzędziu w życiu użytkownika Linuksa, który chce być wydajny. Możesz przetestować, jaką wersję masz, pisząc
$ sed --version
W moim systemie to polecenie mówi mi, że mam sed 4.2.1 zainstalowany oraz linki do strony głównej i innych przydatnych rzeczy. Pakiet nosi nazwę po prostu „sed” niezależnie od dystrybucji, ale jeśli Gentoo oferuje sed w sposób domyślny, uważam, że oznacza to, że możesz być pewny.
Pojęcia
Zanim przejdziemy dalej, uważamy, że ważne jest wskazanie Co Dokładnie tak, że SED, ponieważ „Edytor strumienia” może nie zadzwonić zbyt wiele dzwonków. SED przyjmuje tekst wejściowy, czy określone operacje w każdym wierszu (chyba że określono inaczej) i drukuje zmodyfikowany tekst. Określone operacje mogą być dołączane, wstawienie, usuwanie lub zastąpienie. Nie jest to tak proste, jak może się wydawać: bądź ostrzeżony, że istnieje wiele opcji i kombinacji, które mogą sprawić, że polecenie SED są dość trudne do strawienia. Więc jeśli chcesz użyć SED, zalecamy poznanie podstaw Regexps, a resztę możesz złapać resztę. Zanim zaczniemy samouczek, chcemy podziękować Ericowi Pementowi i innym za inspirację i za to, co zrobił dla każdego, kto chce się uczyć i użyć sed.
Wyrażenia regularne
Ponieważ polecenia/skrypty SED stają się tajemnicze, uważamy, że nasi czytelnicy muszą zrozumieć podstawowe pojęcia zamiast ślepego kopiowania i wklejania poleceń, nie znają znaczenia. Kiedy chce się zrozumieć, czym jest RegexP, kluczowe słowo to „dopasowanie”. Lub jeszcze lepiej, „dopasowanie wzoru”. Na przykład w raporcie dla swojego działu HR napisałeś nazwę Nicka, odnosząc się do architekta sieciowego. Ale Nick ruszył dalej, a John przyszedł, by zająć jego miejsce, więc teraz musisz zastąpić słowo Nick Janem. Jeśli plik nazywa się raport.txt, możesz to zrobić
Raport $ CAT.txt | sed 's/nick/john/g'> raport_new.tekst
Domyślnie SED używa stdout, więc możesz użyć operatora przekierowania skorupy, jak w naszym przykładzie poniżej. To najprostszy przykład, ale zilustrowaliśmy kilka punktów: dopasowaliśmy wzór „Nick” i zastępujemy wszystkie przypadki „John”. Zauważ, że SED jest wrażliwy na wielkość liter, więc bądź ostrożny i sprawdź plik wyjściowy, aby sprawdzić, czy dokonano wszystkich substancji. Powyższe mogło być napisane również w ten sposób:
Raport $ s/nick/John/g '.TXT> Report_new.tekst
Ok, ale gdzie są wyrażenia regularne, pytasz? Cóż, najpierw chcieliśmy zmoczyć twoje stopy koncepcją dopasowania i oto interesująca część.
Jeśli nie jesteś pewien, czy napisałeś „Nick” przez pomyłkę zamiast „Nick” i chcesz to również dopasować, możesz użyć SED/Nick | Nick/John/G '. Pionowy pasek ma to samo znaczenie, które możesz wiedzieć, jeśli użyłeś C, to znaczy wyrażenie pasuje Lub nacięcie. Jak zobaczysz, rury może być również używana na inne sposoby, ale „znaczenie pozostanie. Inni operatorzy szeroko stosowani w regularności są ”?', które pasują do zera lub jednego instancji poprzedniego elementu (Flavou?r będzie pasował do smaku i smaku), „*” oznacza zero lub więcej i „+” pasuje do jednego lub więcej elementów. „^” odpowiada początkowi sznurka, podczas gdy „$” robi coś przeciwnego. Jeśli jesteś użytkownikiem vi (m), niektóre z tych rzeczy mogą wyglądać znajomo. W końcu te narzędzia wraz z AWK lub C mają swoje korzenie na początku Unix. Nie będziemy już nalegać na ten temat, ponieważ sprawy staną się prostsze, czytając przykłady, ale powinieneś wiedzieć, że istnieją różne implementacje regularności: POSIX, POSIX rozszerzone, perl lub różne implementacje wyrażeń regularnych rozmytych, gwarantowane, aby dać Ty ból głowy.
przykłady sed
Nauka polecenia Linux SED z przykładami | |
---|---|
Składnia polecenia Linux | Opis polecenia Linux |
Raport SED/Nick/John/G '.tekst | W raporcie zastąp każde zdarzenie Nicka.tekst |
Raport SED/Nick | Nick/John/G '.tekst | Zastąp każde zdarzenie Nicka lub Nicka Janem. |
sed 's/^//' plik.txt> file_new.tekst | Dodaj 8 przestrzeni po lewej stronie tekstu do ładnego drukowania. |
sed -n '/oczywiście/,/uwaga cię \ | Wyświetl tylko jeden akapit, zaczynając od „Oczywiście” i zakończenie „uwagi zwracasz” |
plik sed -n 12,18p.tekst | Pokaż tylko wiersze 12-18 pliku.tekst |
SED 12 18D Plik.tekst | Pokaż wszystkie pliki.TXT, z wyjątkiem linii od 12 do 18 |
plik sed g.tekst | Plik podwójnej przestrzeni.tekst |
skrypt sed -f.plik SED.tekst | Napisz wszystkie polecenia w skrypcie.sed je i wykonaj |
sed '5!plik S/Ham/Cheese/'.tekst | Wymień szynkę z serem w pliku.txt, z wyjątkiem 5. linii |
plik sed '$ d'.tekst | Usuń ostatnią linię |
sed '/[0-9] \ 3 \/p'.tekst | Drukuj tylko linie z trzema kolejnymi cyframi |
sed '/boom/!plik s/aaa/bb/'.tekst | O ile nie zostanie znalezione boom, wymień AAA na BB |
plik sed '17,/dysk/d '.tekst | Usuń wszystkie linie od wiersza 17 na „dysk” |
Echo One dwa | sed "s/one/unos/i" | Zastępuje jeden na UOS w sposób bezsensowny przypadek, Więc wydrukuje „UNOS dwa” |
sed „g; g”.tekst | Potrójna przestrzeń plik |
sed 's/.plik $ // '.tekst | Sposób na wymianę DOS2Unix 🙂 |
sed 's/ ^[ ^t]*//'.tekst | Usuń wszystkie przestrzenie przed każdą linią pliku.tekst |
sed 's/[ ^t]*$ //'.tekst | Usuń wszystkie przestrzenie na końcu każdej linii pliku.tekst |
sed 's/ ^[ ^t]*//; s/[ ^]*$ //' plik.tekst | Usuń wszystkie przestrzenie z przodu i na końcu każdej linii pliku.tekst |
plik s/foo/bar/'.tekst | Wymień FOO na pasek tylko w pierwszej instancji w linii. |
plik s/foo/bar/4 '.tekst | Wymień foo na pasek tylko dla czwartej instancji w linii. |
plik s/foo/bar/g '.tekst | Wymień foo na pasek dla wszystkich instancji w linii. |
plik sed '/baz/s/foo/bar/g'.tekst | Tylko jeśli linia zawiera baz, zastąp foo barem |
sed '/./,/^$/!plik d '.tekst | Usuń wszystkie kolejne puste linie, z wyjątkiem EOF |
sed '/^$/n;/\ n $/d'.tekst | Usuń wszystkie kolejne puste linie, ale pozwala Tylko górna pusta linia |
sed '/./, $!plik d '.tekst | Usuń wszystkie wiodące puste linie |
sed -e: a -e '/^\ n*$/$ d; n;;/\ n $/ba' \ | Usuń wszystkie puste linie |
sed -e: a -e '/\\ $/n; s/\\\ n //; ta '\ | Jeśli plik kończy się na backslash, dołącz do następnego (przydatne dla skorupy) |
sed '/regex/,+5/expr/' | Dopasuj Regex plus następne 5 linii |
SED „1 ~ 3D”.tekst | Usuń co trzecią linię, zaczynając od pierwszego |
plik sed -n '2 ~ 5p'.tekst | Wydrukuj co 5 linii, zaczynając od drugiego |
SED 'S/[nn] ick/John/g'.tekst | Inny sposób napisania powyższego przykładu. Potrafisz zgadnąć który? |
sed -n '/re/p; q;'.tekst | Wydrukuj tylko pierwszy mecz RE (wyrażenie regularne) |
sed '0,/re/// d;'.tekst | Usuń tylko pierwszy mecz |
SED '0,/re/s // to_that/'.tekst | Zmień tylko pierwszy mecz |
sed 's/^[^,]*,/9999,/'.CSV | Zmień pierwsze pole na 9999 w pliku CSV |
s/^ *\ (.*[^] \) *$/| \ 1 |/; | Skrypt SED do konwersji pliku CSV na oddzielony bar (Działa tylko na niektórych rodzajach CSV, z osadzonymi „S i przecinkami) |
sed ': a; s/\ (^\ | [^0-9.] \) \ ([0-9] \+\) \\ | Zmień liczby z pliku.TXT od 1234.56 Forma do 1.234.56 |
sed -r "s/\<(reg|exp)[a-z]+/\U&/g" | Konwertuj dowolne słowo, zaczynając od Reg lub EXP na wielką część |
SED „1,20 S/Johnson/White/G”.tekst | Zastąpienie Johnsona tylko białym Linie między 1 a 20 |
sed '1,20 !plik s/Johnson/White/g '.tekst | Powyższe odwrócone (dopasuj wszystkie oprócz linii 1-20) |
sed '/from/,/do/s/\/magenta/g; \ | Wymień tylko między „od” i „do” |
sed '/endnotes:/, $ s/Schaff/herzog/g; \ | Wymień tylko od słowa „Endnotes:” do EOF |
sed '/./H; $!d;; x;/regex/!plik d '.tekst | Wydrukuj akapity tylko wtedy, gdy zawierają Regex |
sed -e '/./H; $!d; '-e' x;/re1/!D;\ | Wydrukuj akapity tylko wtedy, gdy zawierają RE1, RE2 i RE3 |
sed ': a; /\\ $/n; s/\\\ n //; plik Ta '.tekst | Połącz dwie linie w pierwszych końcach w operatorze |
sed 's/14 "/czternaście cali/g'.tekst | W ten sposób możesz użyć podwójnych cytatów |
sed 's/\/some \/unix \/ścieżka/\/a \/new \\ | Praca ze ścieżkami UNIX |
sed 's/[a-g] // g'.tekst | Usuń wszystkie znaki z A do G z pliku.tekst |
sed 's/\ (.*\) FOO/\ 1BAR/'.tekst | Wymień tylko ostatni mecz FOO z barem |
sed '1!G; H; $!D' | Zamiennik TAC |
sed '/\ n/!G; s/\ (.\) \ (.*\ n \)/& \ 2 \ 1 \ | Zamiennik obrotowy |
plik sed 10q.tekst | Zamiennik głowy |
sed -e: a -e '$ q; n; 11, $ d; ba' \ | Zamiennik ogona |
sed '$!N; /^\ (.*\) \ n \ 1 $/!P; D' \ | Zamiennik Uniq |
sed '$!N; s/^\ (.*\) \ n \ 1 $/\ 1/; \ \ | Odwrotny (lub równoważny Uniq -d) |
sed '$!N; $!Plik d '.tekst | Równoważny ogon -n 2 |
plik sed -n '$ p'.tekst | … Tail -n 1 (lub ogon -1) |
sed '/regexp/!plik d '.tekst | grep równoważny |
sed -n '/regexp/g; 1!p;; h 'plik.tekst | Wydrukuj linię przed jedną pasującą RegExp, ale nie ten zawierający RegexP |
sed -n '/regexp/n; p;'.tekst | Wydrukuj linię po dopasowaniu RegexP, ale nie ten zawierający RegexP |
plik sed '/wzór/d'.tekst | Usuń wzór dopasowywania linii |
sed '/./!plik d '.tekst | Usuń wszystkie puste wiersze z pliku |
sed '/^$/n;/\ n $/n; // d'.tekst | Usuń wszystkie kolejne puste linie Z wyjątkiem dwóch pierwszych |
sed -n '/^$/p; h;;//./X;/./P;'\ | Usuń ostatni wiersz każdego akapitu |
sed 's/.\ x08 // g ' | Usuń NROFF OFERTRIKES |
sed '/^$/q' | Zdobądź nagłówek poczty |
sed '1,/^$/d' | Zdobądź ciało poczty |
SED '/^Temat: */!D; s ///; q ' | Zdobądź temat poczty |
sed 's/^/>/' | Cytuj wiadomość pocztową, wkładając „>” Przed każdą linią |
sed 's/^> //' | Przeciwnie (wiadomość pocztowa bez wątpienia) |
sed -e: a -e 's/]*> // g;/ | Usuń znaczniki HTML |
sed '/./H; d;; x; s/\ n/= nl =/g '\ | Sortować akapity pliku.TXT alfabetycznie |
sed@/usr/bin@&/local@g 'ścieżka.tekst | Zamień/usr/bin na/usr/bin/lokalny na ścieżce.tekst |
sed@^.*$@<<>> @G 'ścieżka.tekst | Wypróbuj i zobacz 🙂 |
sed 's/\ (\/[^:]*\).*/\ 1/g 'ścieżka.tekst | Podana ścieżka.TXT zawiera ścieżkę $, to będzie echo tylko pierwszą ścieżkę na każdej linii |
sed 's/\ ([^:]*\).*/\ 1/'/etc/passwd | Wymiana AWK - wyświetla tylko użytkowników Z pliku Passwd |
Echo „Welcome to the Geek Stuff” | sed \ | Eksplanatoryjne |
sed -e '/^$/,/^end/s/hills/\ | Zmień „wzgórza” na „góry”, ale tylko na blokach początkowego tekstu z pustą linią i kończąc na początku linii z trzema postaciami „koniec”, włączającymi |
sed -e '/^#/d'/etc/usługi | więcej | Wyświetl plik usług bez skomentowanych wierszy |
sed '$ s@\ ([^:]*\): \ ([^:]*\): \ ([^:]*\ | Odwrotna kolejność elementów w ostatniej linii ścieżki.tekst |
sed -n -e '/regexp/=; x; 1!p; g; $!N; p; d; '\ | Wydrukuj 1 linię kontekstu przed i po dopasowaniu linii, z numerem linii, w którym następuje dopasowanie |
sed '/regex/x; p; x;'.tekst | Włóż nową linię nad każdą linią pasującą do regularności |
sed '/aaa/!D; /BBB/!D; /CCC/!plik d '.tekst | Mecz AAA, BBB i CCC w dowolnej kolejności |
sed '/aaa.*BBB.*CCC/!plik d '.tekst | Mecz AAA, BBB i CCC w tej kolejności |
sed -n '/^.\ 65 \/p '.tekst | Drukuj linie 65 zwariów długie lub więcej |
sed -n '/^.\ 65 \/!plik p '.tekst | Drukuj linie 65 zwariów długich lub mniejszych |
plik sed '/regex/g'.tekst | Włóż pustą linię poniżej każdej linii |
sed '/regex/x; p; x; g;'.tekst | Włóż pustą linię powyżej i poniżej |
sed = plik.txt | sed 'n; s/\ n/\ t/' | Linie liczbowe w pliku.tekst |
sed -e: a -e 's/^.\ 1,78 \ $/\ | Wyrównaj ją do w prawo |
sed -e: a -e 's/^.\ 1,77 \ $/ &/; ta '-e \ | Wyrównać centrum tekstowe |
Wniosek
To tylko część tego, co można powiedzieć o SED, ale ta seria ma być praktycznym przewodnikiem, więc mamy nadzieję, że pomoże ci odkryć moc narzędzi Unix i stać się bardziej wydajnym w pracy.
Powiązane samouczki Linux:
- Rzeczy do zainstalowania na Ubuntu 20.04
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…
- Rzeczy do zainstalowania na Ubuntu 22.04
- Posłuchaj swojej ulubionej stacji radiowej z jednym poleceniem…
- Hung Linux System? Jak uciec do wiersza poleceń i…
- Ubuntu 20.04 Przewodnik
- Mastering Bash Script Loops