Bash Scripting – Split String

V tomto článku probereme, jak rozdělit řetězce ve skriptu bash.

Rozdělení jednoho řetězce na více řetězců se nazývá dělení řetězce. Mnoho programovacích jazyků má vestavěnou funkci pro provádění dělení řetězců, ale v bash není žádná vestavěná funkce, která by to dělala. Existují různé metody, jak provést rozdělený řetězec v bash. Podívejme se na všechny metody jeden po druhém s příklady.

Metoda 1: Použití proměnné IFS

$IFS(Internal Field Separator) je speciální proměnná shellu. Slouží k přiřazení oddělovače (sekvence jednoho nebo více znaků, na základě kterých chceme řetězec rozdělit). Oddělovačem může být libovolná hodnota nebo znak jako ‚ ‘, ‚ ‘, ‚-‘ atd. Po přiřazení hodnoty do proměnné $IFS je třeba načíst hodnotu řetězce. Řetězec můžeme číst pomocí možností „-r“ a „-a“.

  • ‚-r‘: Přečte zpětné lomítko () jako znak namísto znaku escape
  • „-a“: Používá se k uložení rozdělených slov do proměnné pole, která je deklarována za volbou -a.

Příklad 1: Rozdělte řetězec mezerou

Kód:

#!/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 

Výstup:

Welcome to techcodeview.com 

Příklad 2: Rozdělení řetězce symbolem

Rozdělení řetězce pomocí symbolu @.

Kód:

#!/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 

Výstup:

Welcome to techcodeview.com !! 

Metoda 2: Bez použití proměnné IFS

V této metodě se k rozdělení dat řetězce používá příkaz readarray s volbou -d. „-d“: tato možnost funguje jako proměnná IFS pro definování oddělovače.

Příklad 1: Rozdělení řetězce mezerou

Kód:

#!/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 

Nyní se podívejme, jak se skript chová:

  • Skript nastaví hodnotu text> na Vítejte na techcodeview.com.
  • The readarray> příkaz rozdělí řetězec do pole pomocí mezery jako oddělovače, což má za následek pole strarr> obsahující následující prvky: Vítejte na, techcodeview.com.
  • Smyčka for iteruje přes každý prvek souboru strarr> pole.
  • Vytiskne každý prvek jeden po druhém na samostatné řádky.

Výstup:

Welcome to techcodeview.com 

Příklad 2: Rozdělení pomocí A dvojtečka jako A oddělovač

Kód:

#!/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 

Výstup:

Welcome to techcodeview.com 

Metoda 3: Rozdělte řetězec pomocí víceznakového oddělovače

V této metodě se proměnná používá k ukládání dat řetězce a jiná proměnná se používá k ukládání dat oddělovačů s více znaky. Je také deklarována proměnná pole pro uložení rozděleného řetězce.

Kód:

# 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 

Výstup:

Romy Pushkar Nikhil Rinkle