Operacje i formatowanie tekstu w BASH-u
Stronę tą wyświetlono już: 9866 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.