logo

Bash Scripting: cadena dividida

En aquest article, parlarem de com dividir les cadenes en un script bash.

Dividir una sola corda en diverses cordes s'anomena divisió de corda. Molts llenguatges de programació tenen una funció integrada per dur a terme la divisió de cadenes, però no hi ha cap funció integrada a bash per fer-ho. Hi ha diversos mètodes per dur a terme una cadena dividida a bash. Vegem tots els mètodes un per un amb exemples.



Mètode 1: Ús de la variable IFS

$IFS (Separador de camps intern) és una variable de shell especial. S'utilitza per assignar el delimitador (una seqüència d'un o més caràcters en funció de la qual volem dividir la cadena). Qualsevol valor o caràcter com ' ', ' ', '-' etc. pot ser el delimitador. Després d'assignar el valor a la variable $IFS, cal llegir el valor de la cadena. Podem llegir la cadena utilitzant les opcions '-r' i '-a'.

  • '-r': Llegia barra invertida () com un caràcter en lloc d'un caràcter d'escapada
  • '-a': s'utilitza per emmagatzemar les paraules dividides en una variable de matriu que es declara després de l'opció -a.

Exemple 1: divideix la cadena per espai

Codi:



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

Sortida:

Welcome to techcodeview.com>

Exemple 2: divideix la cadena per un símbol

Divisió de cadena amb el símbol @.



Codi:

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

Sortida:

Welcome to techcodeview.com !!>

Mètode 2: sense utilitzar la variable IFS

En aquest mètode, l'ordre readarray amb l'opció -d s'utilitza per dividir les dades de la cadena. '-d': aquesta opció actua com una variable IFS per definir el delimitador.

Exemple 1: divideix la cadena per espai

Codi:

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

Ara, vegem com es comporta el guió:

  • L'script estableix el valor detext>a Benvingut a techcodeview.com.
  • Elreadarray>L'ordre divideix la cadena en una matriu utilitzant l'espai com a delimitador, donant lloc a la matriustrarr>que conté els elements següents: Benvingut, a, techcodeview.com.
  • El bucle for itera sobre cada element del fitxerstrarr>matriu.
  • Imprimeix cada element un per un en línies separades.

Sortida:

Welcome to techcodeview.com>

Exemple 2: dividir utilitzant a còlon com a delimitador

Codi:

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

Sortida:

Welcome to techcodeview.com>

Mètode 3: divideix la cadena amb un delimitador de diversos caràcters

En aquest mètode, s'utilitza una variable per emmagatzemar dades de cadena i una altra variable per emmagatzemar dades delimitadores de diversos caràcters. També es declara una variable de matriu per emmagatzemar la cadena dividida.

Codi:

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

Sortida:

Romy Pushkar Nikhil Rinkle>