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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni post

moreutils cz. 1 – vidir

Następny post

18 zalet, dla których warto zainstalować Linuksa

Powiązane posty

MC: szybkie przełączanie sortowania i coś jeszcze

Kilk na kolumnę i sortujemy według jej zawartości, a gdy już posortowane, odwracamy porządek wyświetlania. Skoro to tak naturalna i dawno przyjęta praktyka, to dlaczego w Midnight Commanderze nie było jej jeszcze do niedawna? Tego nie wiem i tego też nie szukałem.

Znalazłem to przy okazji któregoś z kolei szukania, jak sortować kombinacją klawiszy. Robienie tego w kilku krokach za pomocą menu było dość wkurzające.

Więcej...