moreutils cz. 2 – sponge i vipe

Moreutils to pakiet 15 dodatkowych narzędzi do basha. Wszystkie są ciekawe, a część z nich potrafi być bardzo użyteczna. Tym razem będzie o niezwykle przydatnym poleceniu sponge oraz bardzo ciekawej koncepcji vipe.

Ten artykuł stanowi kontynuację wcześniejszego tekstu na temat pakietu moreutils.

Instalacja

Pakiet moreutils nie jest domyślnie zainstalowany w systemie i trzeba go sobie doinstalować – w zależności od dystrubucji:

$ sudo pacman -S moreutils
$ sudo dnf install moreutils
$ sudo yum install moreutils
$ sudo apt-get install moreutils

Sponge – po co komu gąbka w systemie plików

W Linuksie często mamy do czynienia z plikami tekstowymi. Nierzadko te pliki trzeba modyfikować. Niektóre polecenia pozwalają zmienić zawartość pliku na dysku (np. sed z opcją -i), a niektóre nie – przykładem niech będzie często stosowane polecenie sort. Wpisanie w konsoli

$ sort plik.txt > plik.txt

koczy się tym, że plik.txt ma zerową długość, ponieważ nie można jednocześnie czytać z pliku i zapisywać do niego.

sponge. Po przekierowaniu pliku do niego samego ma on długość 0 bajtów
Po przekierowaniu pliku do niego samego ma on długość 0 bajtów

Dokładnie tak samo będzie, kiedy spróbujemy użyć potoku:

$ cat plik.txt | sort > plik.txt

plik.txt również zostanie zniszczony.

I tu wkracza sponge. Zadaniem programu jest przechwycenie całego wyjścia, zmagazynowanie i zapisanie we wskazanym pliku, kiedy ten będzie już dostępny do zapisu:

$ sort plik.txt | sponge plik.txt

Wynik sortowania, przekierowany do potoku, jest „wsysany” przez gąbkę, a kiedy już plik zostanie zwolniony, „wyciskany” do niego.

sponge. Odczyt i zapis do tego samego pliku
Sponge umożliwia zapisanie danych bezpośrednio do tego samego pliku, z którego zostały odczytane.

Ot i cała filozofia. Pomysł jest niezwykle prosty, ale muszę przyznać, że w praktyce pracy z bashem przydaje się bardzo często. Zamiast tworzyć pliki tymczasowe, przepuszcza się wynik działania poleceń przez sponge bez ryzyka utraty danych.

Vipe – między wódkę a zakąskę

Wpychanie się pomiędzy ciasno dopasowane części procesu to nie zawsze jest dobry pomysł. Niemniej czasem warto zajrzeć tu i tam, by przekonać się czy wszystko idzie dobrze albo poprawić szczegóły.

Vipe jest programem, który umożliwia edycję danych przekazywanych do potoku „w locie”.

Używany jest domyślny edytor – w Ubuntu jest to nano. Można użyć innego edytora jeśli zdefiniuje się zmienną EDITOR (definiowanie edytora zostało dokładniej opisane w pierwszej części serii).

Zobaczmy jak to działa:

$ cat plik.txt | vipe | sponge plik.txt
vipe. Wyjściowy plik z danymi
plik.txt zawiera nieposortowane liczby
vipe. Dane dopisane w edytorze
Po posortowaniu dane są przekierowane do edytora, tu dopisano na końcu “10”
vipe. Po przekierowaniu zmodyfikowane dane są zapisane w pliku
Zmodyfikowane dane – zgodnie z poleceniem – są wysyłane do pliku

Trzeba przyznać, że nie jest to często używane narzędzie, ale bardzo się przydało np. przy sortowaniu i edycji słownika, który wymagał ręcznej ingerencji – i można to było zrobić pomiędzy sortowaniem, a usunięciem duplikatów.

To jeszcze nie wszystkie przydatne programy, które znajdują się w pakiecie moreutils. Wkrótce opis kolejnych.

Poprzedni post

moreutils cz. 1 – vidir

Następny post

18 zalet, dla których warto zainstalować Linuksa

Powiązane posty
Lokalizacja pliku ikony w katalogu projektu

Start z Javą i Eclipse. Część trzecia

Szlifowanie interfejsu”

Jak wspomniałem w drugiej części artykułu, tym razem zajmiemy się poprawieniem wyglądu komponentów i działaniem całej aplikacji. Proponuję aby na początek zamienić wszystkie komponenty „AWT” wykorzystane w programie, na komponenty z biblioteki „Swing”. Aby to zrobić trzeba na początek przedefiniować tzw: „opakowanie” aplikacji. Zaczniemy od zmiany klasy „Frame” na „JFrame”.

Więcej...