Skrypty Bash – Podziel ciąg
W tym artykule omówimy, jak podzielić ciągi znaków w skrypcie bash.
Dzielenie pojedynczego ciągu na wiele ciągów nazywa się dzieleniem ciągu. Wiele języków programowania ma wbudowaną funkcję dzielenia ciągów, ale w bashu nie ma wbudowanej funkcji, która by to umożliwiała. Istnieją różne metody podziału łańcucha w bashu. Zobaczmy wszystkie metody jedna po drugiej z przykładami.
Metoda 1: Użycie zmiennej IFS
$IFS (wewnętrzny separator pól) to specjalna zmienna powłoki. Służy do przypisania ogranicznika (ciągu jednego lub większej liczby znaków, na podstawie którego chcemy podzielić ciąg). Dowolna wartość lub znak, taki jak „ ”, „ ”, „-” itp. może być ogranicznikiem. Po przypisaniu wartości do zmiennej $IFS należy odczytać wartość ciągu znaków. Możemy odczytać ciąg znaków za pomocą opcji „-r” i „-a”.
- „-r”: Odczytuje ukośnik odwrotny () jako znak zamiast znaku ucieczki
- „-a”: Służy do przechowywania podzielonych słów w zmiennej tablicowej zadeklarowanej po opcji -a.
Przykład 1: Podziel ciąg znaków spacją
Kod:
#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr < < < '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done Wyjście:
Welcome to techcodeview.com
Przykład 2: Podziel ciąg znaków za pomocą symbolu
Łańcuch podzielony za pomocą symbolu @.
Kod:
#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr < < < '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done
Wyjście:
Welcome to techcodeview.com !!
Metoda 2: Bez użycia zmiennej IFS
W tej metodzie polecenie readarray z opcją -d służy do dzielenia danych w postaci ciągu znaków. „-d”: ta opcja działa jak zmienna IFS do definiowania ogranicznika.
Przykład 1: Podziel ciąg znaków spacją
Kod:
#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr < < < '$text' # Print each value of the array by # using loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done Zobaczmy teraz jak zachowuje się skrypt:
- Skrypt ustawia wartość
text>do Witamy na techcodeview.com. - The
readarray>polecenie dzieli ciąg na tablicę, używając spacji jako separatora, w wyniku czego powstaje tablicastrarr>zawierający następujące elementy: Witamy w techcodeview.com. - Pętla for iteruje po każdym elemencie
strarr>szyk. - Wypisuje każdy element jeden po drugim w oddzielnych liniach.
Wyjście:
Welcome to techcodeview.com
Przykład 2: Podziel za pomocą A okrężnica jako A ogranicznik
Kod:
#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr < < < '$text' # Print each value of the array by using # loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done Wyjście:
Welcome to techcodeview.com
Metoda 3: Podziel ciąg za pomocą wieloznakowego ogranicznika
W tej metodzie zmienna służy do przechowywania danych w postaci ciągu znaków, a inna zmienna służy do przechowywania danych w postaci wieloznakowych ograniczników. Deklarowana jest także zmienna tablicowa przechowująca podzielony ciąg znaków.
Kod:
# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done Wyjście:
Romy Pushkar Nikhil Rinkle