23 Dec 2009

Manipulacja tekstem w Bashu

Bash jest całkiem dobrym narzędziem jeżeli chodzi o manipulację tekstem (oczywiście nie może się umywać do Perla/Seda/AWKa/Pythona), ale sporo funkcji ma zaimplementowanych, wiele osób nawet sobie nie zdaje z tego sprawy. W tej notce spróbuję część tej funkcjonalności przedstawić:

Wypisywanie całości plików

cat
łączenie i wypisywanie plików - zobacz useless cat award
tac
łączenie i wypisywanie odwróconych plików
nl
numerowanie linii i wypisywanie plików
seq
wypisywanie numerycznych sekwencji
od
wypisywanie plików w formacie ósemkowym i innych

Wypisywanie części plików

head
wypisywanie początku plików
tail
wypisywanie końcówki plików
split
podział pliku na części stałej wielkości
csplit
podział pliku na części zależne od kontekstu
join
łączenie linii w pliku po pojedynczym polu
paste
łączenie linii w plikach (linia nr 1 z pliku B zostaje doklejona do lini 1 z pliku A)
rev
zamiana kolejności linii - te z końca pliku są na górze, te z góry na końcu pliku
tee
przekierowanie strumienia wejściowego na wiele strumieni wyjściowych

Formatowanie zawartości plików

fmt
reformatowanie akapitów tekstu
pr
stronicowanie i kolumnowanie plików do wydruku
fold
zawijanie linii wejściowych do zadanej szerokości

Sortowanie i działania na plikach posortowanych

sort
sortowanie plików tekstowych
uniq
pozostawianie unikalnych linii w pliku
comm
porównywanie dwu posortowanych plików liniami
ptx
tworzenie indeksu permutacyjnego zawartości pliku
tsort
sortowanie topologiczne

Działania na polach wewnątrz linii

cut
wypisywanie wybranych części linii
paste
zlepianie linii plików
join
łączenie linii według wspólnego pola

Działania na znakach

tr
zamiana, ściskanie, usuwanie znaków
expand
zamiana tabulacji na spacje
unexpand
zamiana spacji na tabulacje

Podsumowywanie plików

wc
wypisywanie liczby bajtów, słów i linii
sum
wypisywanie sumy kontrolnej i liczby bloków
csum / cksum
wypisywanie sumy CRC liczby bloków
md5sum
wypisywanie lub sprawdzanie skrótu danych
file
Określenie typu pliku

Działania na nazwach plików i katalogach

basename
pozostawia tylko nazwę pliku (nawet ucina rozszerzenie jeżeli trzeba ;))
dirname
pozostawia tylko pełną ścieżkę do pliku (bez nazwy)
fuser
pozwala zidentyfikować i zabić proces który uzyskuje dostęp do pliku

Inne potrzebne narzędzia

echo
wyświetla argument na ekranie
cal
wyświetla kalendarz
date
wyświetla obecną datę i czas
read
odczytuje linię ze standardowego wejścia
let
realizuje działanie arytmetyczne
test
pozwala na sprawdzanie różnych wartości [] jest aliasem dla tego polecenia

Narzedzia bardziej zaawansowane

awk
narzędzie pozwalające na wyszukiwania oraz edycję plików
grep
narzędzie pozwalające wyszukiwać słów oraz ich części w plikach tekstowych
sed
Edytor strumieniowy - radzi sobie z naprawdę ogromnymi plikami

Odnośniki

Podsumowanie

Przed przystąpieniem do pisania jakiegoś programu operującego na plikach, polecam zajrzeć do dokumentacji programów które tu wymieniłem oraz do dokumentacji pakietu textutils, bo być może problem który chcesz rozwiązać jest już rozwiązany?

No comments:

Post a Comment