Operacje i formatowanie tekstu w BASH-u

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

Wyświetlanie tekstu

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

Listing 1
  1. echo "Podaj swoje imię:";
  2. read NAME;
  3. echo "Witaj $NAME";

Drugim sposobem jest wykorzystanie polecenia printf:

Listing 2
  1. echo "Podaj swoje imię:";
  2. read NAME;
  3. printf "Witaj $NAME";

Formatowanie zmiennych liczbowych poleceniem printf

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

Listing 3
  1. NUMBER=100;
  2. printf "Liczba w systemie dziesiętnym: %in" $NUMBER
  3. printf "Liczba w systemie ósemkowym: %on" $NUMBER
  4. 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:

Listing 4
  1. for i in $(seq 31 37) $(seq 91 97);
  2. do
  3. printf "\033[${i}m$i\n";
  4. 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:

Listing 5
  1. STRING="Przykładowy tekst";
  2. echo ${#STRING};

Wynik działania powyższego skryptu:

17

Wyciąganie fragmentu tekstu

Ogólna konstrukcja wyciągania fragmentu tekstu:

Listing 6
  1. ${NAZWA_ZMIENNEJ:POCZĄTEK_WYCINANEGO_TEKSTU:DŁUGOŚĆ_WYCINANEGO_TEKSTU}

Praktyczny przykład działania:

Listing 7
  1. TEXT="Jakiś przykładowy tekst";
  2. 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:

Listing 8
  1. $VALUE="Some text";
  2. 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:

Listing 9
  1. $VALUE="Some text";
  2. 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:

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

Listing 11
  1. TEXT=$(echo "$TEXT" | sed "s/adleko/daleko/g");

Na końcu musi być literka g.

Komentarze