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 tablica strarr> 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