
Edmund Richardson
0
1153
166
Dwa najbardziej niedoceniane narzędzia linuksowe to Sed i Awk. Chociaż wprawdzie mogą się wydawać nieco tajemnicze, jeśli kiedykolwiek będziesz musiał dokonywać powtarzalnych zmian w dużych fragmentach kodu lub tekstu, lub jeśli kiedykolwiek będziesz musiał przeanalizować jakiś tekst, Sed i Awk są nieocenione.
Czym oni są? Jak są używane? I w jaki sposób połączone razem ułatwiają przetwarzanie tekstu?
Co to jest Sed?
Sed został opracowany w 1971 roku w Bell Labs przez legendarnego pioniera komputerowego Lee E. McMahona.
Nazwa oznacza edytor strumieniowy, i tak to robi. Pozwala edytować treści lub strumienie tekstu programowo, dzięki zwartemu i prostemu językowi programowania Turinga.
Sposób działania jest prosty: czyta tekst, wiersz po wierszu, w buforze. Dla każdej linii wykona predefiniowane instrukcje, w stosownych przypadkach.
Na przykład, jeśli ktoś ma napisać skrypt Sed, który zastąpi to słowo “piwo” z “Soda”, a następnie przeszedł do pliku tekstowego zawierającego całe teksty do “99 butelek piwa na ścianie”, przejdzie przez ten plik linia po linii i wydrukuje “99 butelek sody na ścianie”, i tak dalej.
Najbardziej podstawowym skryptem Sed jest skrypt Hello World. W tym przypadku używamy narzędzia Unix Echo, które jedynie drukuje ciągi znaków, aby wydrukować “Witaj świecie”. Ale przesyłamy to do Seda i mówimy o zamianie “Świat” z”Dave”. Rzecz oczywista.
echo „Hello World” | sed s / world / Dave
Możesz także łączyć instrukcje Sed w pliki, jeśli potrzebujesz trochę bardziej skomplikowanej edycji. Zainspirowany tym przezabawnym wątkiem Reddit, zabiorę tekst do A-Ha Take On Me, i zastąp każde wystąpienie “ja”, “Mnie”, i “Mój”, z Gregiem.
Najpierw wstawię tekst piosenki do pliku tekstowego o nazwie tom.txt. Następnie otworzę mój ulubiony edytor tekstów (moim ulubionym jest Vim 7 najlepszych powodów, aby dać szansę edytorowi tekstów Vim 7 najlepszych powodów, aby dać szansę edytorowi tekstów Vim Przez lata próbowałem jednego edytora tekstu po inny. Ty nazywasz to, próbowałem. Używałem każdego z tych edytorów przez ponad dwa miesiące jako mój główny codzienny edytor. Jakoś, ja…, ale Nano nano vs. vim: edytory tekstu terminalowego w porównaniu nano vs. vim: porównanie edytorów tekstu terminala Chociaż Linux stał się na tyle prosty, że praktycznie każdy może go używać bez konieczności korzystania z terminala, niektórzy z nas regularnie go używają lub są ciekawi, jak można kontrolować… i Gedit gedit: One Z najbardziej pełnych funkcji edytorów zwykłego tekstu [Linux i Windows] gedit: Jeden z najbardziej pełnych funkcji edytorów zwykłego tekstu [Linux i Windows] Gdy myślisz o edytorach zwykłego tekstu, pierwszą rzeczą, która może pojawić się w twojej głowie, jest Windows „Aplikacja Notatnik. Robi dokładnie to, co jej opis pracy st ates - zwykłe funkcje dla zwykłego tekstu… to doskonały wybór) i dodaj następujące wiersze. Upewnij się, że tworzony plik kończy się .sed.
Możesz zauważyć, że w powyższym przykładzie powtórzyłem się (np. S / me / Greg / i s / Me / Greg /). Jest tak, ponieważ niektóre wersje Sed, takie jak ta, która jest dostarczana z Mac OS X, robią nie obsługuje dopasowanie bez rozróżniania wielkości liter. W związku z tym musimy napisać dwie instrukcje Sed dla każdego słowa, aby rozpoznało wersję pisaną wielką i niezapisaną literą.
To nie zadziała idealnie, jakbyś zastąpił każde wystąpienie “ja”, “Mnie”, i “Mój” ręcznie. Pamiętaj, że używamy tego tylko jako ćwiczenia, aby zademonstrować, jak możesz pogrupować instrukcje Sed w jednym skrypcie, a następnie wykonać je za pomocą jednego polecenia.
Następnie musimy wywołać plik. Aby to zrobić, uruchamiamy to polecenie.
kot tom.txt | sed -f greg.sed
Zwolnijmy i zobaczmy, co to robi. Orzełooki czytelnicy zauważą, że jesteśmy nie używając Echo tutaj. Używamy Cat. Jest tak, ponieważ podczas gdy Cat wydrukuje całą zawartość pliku, echo wypisze tylko nazwę pliku. Zauważysz również, że prowadzimy Sed z “-fa” flaga. Mówi to, aby otworzyć skrypt jako plik.
Rezultat końcowy jest taki.
Warto również zauważyć, że Sed obsługuje wyrażenia regularne (REGEX). Umożliwiają one definiowanie wzorców w tekście przy użyciu specjalnej i skomplikowanej składni.
Oto przykład, jak to może działać. Weźmiemy wyżej wspomniane teksty piosenek, ale użyj wyrażenia regularnego, aby wydrukować każdy wiersz nie zacząć od “Brać”.
kot tom.txt | sed / ^ Take / d
Sed jest oczywiście niezwykle przydatny. Ale jest jeszcze bardziej wydajny w połączeniu z Awk.
Co to jest Awk?
Awk, podobnie jak Sed, jest językiem programowania zaprojektowanym do obsługi dużych tekstów. Ale chociaż Sed jest używany do przetwarzania i modyfikacji tekstu, Awk jest głównie używane jako narzędzie do analiza i raportowanie.
Podobnie jak Sed, Awk został po raz pierwszy opracowany w Bell Labs w latach siedemdziesiątych. Jego nazwa nie pochodzi od tego, co program robi, ale raczej nazwiska każdego z autorów - Alfreda Aho, Petera Weinbergera i Briana Kernaghana.
Awk działa poprzez czytanie pliku tekstowego lub strumienia wejściowego po jednym wierszu na raz. Każda linia jest skanowana w celu sprawdzenia, czy pasuje do wcześniej zdefiniowanego wzoru. Jeśli znaleziono dopasowanie, wykonywana jest akcja.
Ale chociaż Sed i Awk mogą mieć podobne cele, są to dwa zupełnie różne języki, z dwiema zupełnie odmiennymi filozofiami projektowania. Awk bardziej przypomina niektóre języki ogólnego przeznaczenia Jak wybrać język programowania, aby uczyć się dziś i uzyskać świetną pracę za 2 lata Jak wybrać język programowania, aby uczyć się dziś i uzyskać świetną pracę za 2 lata Może to zająć lata poświęconej pracy zostań naprawdę dobrym programistą; więc czy istnieje sposób, aby wybrać odpowiedni język, aby zacząć od dziś, aby jutro zostać zatrudnionym? , jak C, Python i Bash. Ma takie funkcje, jak funkcje i bardziej podobne do C podejście do iteracji i zmiennych (James Bruce wyjaśnił, jak działa iteracja Absolutne podstawy programowania dla początkujących (część 2) Absolutne podstawy programowania dla początkujących (część 2) Częściowo 2 naszego absolutnego przewodnika dla początkujących o programowaniu, omówię podstawy funkcji, zwracane wartości, pętle i warunki warunkowe. Upewnij się, że przeczytałeś część 1. przed rozwiązaniem tego problemu, w którym wyjaśniłem…). Mówiąc prościej, wydaje się bardziej jak język programowania.
Wypróbujmy to. Używając słów Take On Me, wydrukujemy wszystkie linie dłuższe niż 20 znaków.
awk 'length (0 $)> 80' tom.txt
Następny przykład mam bezwstydnie pochodzi z oficjalnej dokumentacji Awk. Ale to świetny przykład potencjału tego potężnego, ale malutkiego języka. Jest to również świetny pokaz działania iteracji i zmiennych. Najpierw utwórz plik o nazwie “WordCount.awk”, i dodaj następujące wiersze.
dla (i = 1; i <= NF; i++) freq[$i]++
END for (słowo we freq) printf "% s \ t% d \ n", słowo, freq [słowo]
Zapisz go, a następnie uruchom za pomocą następującego polecenia.
awk -f WordCount.awk tom.txt
Fajnie, prawda? Prawdopodobnie zauważysz, że nie są w żadnej kolejności. ty mogą posortuj wyniki za pomocą narzędzia sortującego Unix. Ale zostawimy to na kolejny dzień. Uprościmy to.
Łączenie dwóch
Zarówno Awk, jak i Sed są niezwykle potężne w połączeniu. Możesz to zrobić za pomocą potoków uniksowych. To są “|” bity między poleceniami.
Spróbujmy tego: Wymienimy wszystkie linie w Take On Me, które mają więcej niż 20 znaków, używając Awk. Następnie usuniemy wszystkie linie zaczynające się od “Brać”. Razem wszystko wygląda następująco:
awk 'length (0 $)> 20' tom.txt | sed / ^ Take / d
I produkuje to:
Teraz odwróćmy to. Zaczniemy od usunięcia wszystkich linii rozpoczynających się od Take, a następnie potokujmy je do Awk, gdzie policzymy, ile razy każde słowo się pojawi. Wygląda to trochę tak:
kot tom.txt | sed / ^ Take / d | awk -f WordCount.awk
Moc Sed i Awk
Jest tylko tyle rzeczy, które możesz wyjaśnić w jednym artykule. Ale mam nadzieję, że zilustrowałem, jak niezmiernie potężne są Sed i Awk. Mówiąc najprościej, są potęgą przetwarzania tekstu.
Dlaczego więc miałbyś się przejmować? Poza tym, że nigdy nie wiadomo, kiedy trzeba wprowadzić przewidywalne, powtarzalne zmiany w dokumencie tekstowym, Sed i Awk doskonale nadają się do analizowania plików dziennika. Jest to szczególnie przydatne, gdy próbujesz debugować problem na swoim serwerze LAMP. Zarejestrowałeś się w hostingu internetowym SSH? Nie martw się - łatwa instalacja oprogramowania sieciowego zarejestrowanego na potrzeby hostingu wyłącznie przez SSH? Nie martw się - łatwa instalacja oprogramowania WWW Nie wiesz, co należy wiedzieć o obsłudze Linuksa za pomocą jego potężnego wiersza poleceń? Nie martw się więcej. lub przeglądanie dzienników dostępu w celu sprawdzenia, czy Twój serwer został zhakowany.
Czy znalazłeś ciekawe zastosowanie dla Sed i Awk? Czy są jakieś inne narzędzia Linuksa, które uważasz za niedoceniane? Daj mi znać w komentarzach poniżej, a my porozmawiamy.