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 polestrarr>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