Operacje i formatowanie tekstu w BASH-u

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 12906 razy

Wyświetlanie tekstu

Istnieją dwie instrukcje, które można wykorzystać do wyświetlenia tekstu, pierwszą z nich jest echo:

echo "Podaj swoje imię:"; read NAME; echo "Witaj $NAME";

Drugim sposobem jest wykorzystanie polecenia printf:

echo "Podaj swoje imię:"; read NAME; printf "Witaj $NAME";

Formatowanie zmiennych liczbowych poleceniem printf

Polecenie printf ma bardziej zaawansowane możliwości formatowania zmiennych liczbowych. Oto przykład:

NUMBER=100; printf "Liczba w systemie dziesiętnym: %in" $NUMBER printf "Liczba w systemie ósemkowym: %on" $NUMBER printf "Liczba w systemie szesnastkowym: %xn" $NUMBER

Wynik działania powyższego skryptu:

Liczba w systemie dziesiętnym: 100
Liczba w systemie ósemkowym: 144
Liczba w systemie szesnastkowym: 64

Kolorowanie tekstu wyświetlanego w konsoli

Polecenie printf oprócz bardziej zaawansowanego formatowania zmiennych liczbowych oferuje również możliwość wprowadzania kodów sterujących (ANSI escape code). Za pomocą odpowiedniego kodu można zmienić kolor wyświetlanego tekstu, oto przykład:

for i in $(seq 31 37) $(seq 91 97); do printf "\033[${i}m$i\n"; done

Wynik działania powyższego kodu będzie następujący:

31
32
33
34
35
36
37
91
92
93
94
95
96
97

Pozyskiwanie informacji o długości tekstu

W BASH-u długość zmiennej tekstowej pozyskuje się w następujący sposób:

STRING="Przykładowy tekst"; echo ${#STRING};

Wynik działania powyższego skryptu:

17

Wyciąganie fragmentu tekstu

Ogólna konstrukcja wyciągania fragmentu tekstu:

${NAZWA_ZMIENNEJ:POCZĄTEK_WYCINANEGO_TEKSTU:DŁUGOŚĆ_WYCINANEGO_TEKSTU}

Praktyczny przykład działania:

TEXT="Jakiś przykładowy tekst"; echo ${TEXT:6:11};

Wynik działania powyższego kodu:

przykładowy

Podmienianie znaków poleceniem tr

Polecenie tr umożliwia podmianę znaków z jednego łańcucha na znaki z łańcucha drugiego, np w taki sposób:

$VALUE="Some text"; echo $VALUE | tr [ometex] [OMETEX];

Powyższy kod wyświetli:

SOME TEXT

Ponieważ wszystkie litery z pierwszego ciągu znaków zostały podmienione na odpowiadające im litery z drugiego ciągu. Powyższy kod można uogólnić stosując specjalny zapis:

$VALUE="Some text"; echo $VALUE | tr [:lower:] [:upper:];

W powyższym kodzie [:lower:] oznacza wszystkie małe litery, zaś [:upper:] wszystkie duże litery. Czyli zamieniane będą małe literki na duże.

Zamiana tekstu w tekście za pomocą polecenia sed

Polecenie sed umożliwia podmienianie tekstu w tekście w następujący sposób:

TEXT="Nam strzelać nie kazano. Wstąpiłem na działo I spojrzałem na pole; dwieście armat grzmiało Artyleryi ruskiej ciągną się szeregi, Prosto, długo, adleko, jako morza brzegi; I widziałem ich wodza: przebiegł, mieczem skinął I jak ptak jedno skrzydło wojska swego zwinął; Wylewa się spod skrzydła ściśniona piechota Długą czarną kolumną, jako lawa błota. Nasypana iskrami bagnetów. Jak sępy Czarne chorągwie na śmierć prowadzą zastępy."; echo -e "$TEXT"; TEXT=$(echo "$TEXT" | sed "s/adleko/daleko/"); echo " Po zamianie "; echo -e "$TEXT";

W tekście przechowywanym w zmiennej TEXT znajduje się błąd, zwykła literówka w postaci: adleko, które powinno zostać zamienione na daleko. Dzięki poleceniu sed z opcją s można podmienić pierwsze wystąpienie wyrazu adleko na wyraz daleko. Jeżeli każde możliwe wystąpienie wyrazu ma być podmienione to polecenie sed powinno zostać użyte w następujący sposób:

TEXT=$(echo "$TEXT" | sed "s/adleko/daleko/g");

Na końcu musi być literka g.