GNU/Linux >> Znalost Linux >  >> Linux

Jak rozdělit řetězec ve skriptu Bash

Řekněme, že máte dlouhý řetězec s několika slovy oddělenými čárkou nebo podtržítkem. Chcete tento řetězec rozdělit a extrahovat jednotlivá slova.

Řetězce můžete v bash rozdělit pomocí příkazu Internal Field Separator (IFS) a read nebo můžete použít příkaz tr. Dovolte mi, abych vám na příkladech ukázal, jak to udělat.

Metoda 1:Rozdělení řetězce pomocí příkazu read v Bash

Zde je můj ukázkový skript pro rozdělení řetězce pomocí příkazu read:

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
IFS=';' read -ra my_array <<< "$my_string"

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

Část, která rozděluje řetězec, je zde:

IFS=';' read -ra my_array <<< "$my_string"

Dovolte mi, abych vám to vysvětlil. IFS určuje oddělovač, na kterém chcete rozdělit řetězec. V mém případě je to středník. Může to být cokoli, co chcete, například mezera, tabulátor, čárka nebo dokonce písmeno.

IFS v příkazu read rozdělí vstup na oddělovač. Příkaz read čte nezpracovaný vstup (volba -r), takže zpětná lomítka doslova interpretuje, místo aby je považoval za znak escape. Volba -a s příkazem read ukládá přečtené slovo do pole v bash.

Jednodušeji řečeno, dlouhý řetězec je rozdělen na několik slov oddělených oddělovačem a tato slova jsou uložena v poli.

Nyní můžete přistupovat k poli a získat libovolné slovo, které chcete, nebo použít smyčku for v bash k vytištění všech slov jedno po druhém, jak jsem to udělal ve výše uvedeném skriptu.

Zde je výstup výše uvedeného skriptu:

Ubuntu
Linux Mint
Debian
Arch
Fedora

Metoda 2:Rozdělení řetězce pomocí příkazu tr v Bash

Toto je příklad rozdělení řetězce bash pomocí příkazu tr (translate):

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"  
my_array=($(echo $my_string | tr ";" "\n"))

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

Tento příklad je v podstatě stejný jako ten předchozí. Místo příkazu read se k rozdělení řetězce na oddělovači používá příkaz tr.

Problém s tímto přístupem je, že prvek pole je rozdělen na „oddělovač mezery“. Z tohoto důvodu budou prvky jako „Linux Mint“ považovány za dvě slova.

Zde je výstup výše uvedeného skriptu:

Ubuntu
Linux
Mint
Debian
Arch
Fedora

To je důvod, proč dávám přednost prvnímu způsobu rozdělení řetězce v bash.

Doufám, že vám tento rychlý bash návod pomohl při rozdělování struny. V souvisejícím příspěvku si také můžete přečíst o porovnávání řetězců v bash.

A pokud jste v Bash úplně noví, přečtěte si naši sérii výukových programů pro začátečníky.


Linux
  1. Jak číst řetězec jako hexadecimální číslo v Bash?

  2. Jak najít délku struny v Bash [Rychlý tip]

  3. Jak zkontrolovat, zda řetězec obsahuje podřetězec v Bash

  1. Jak zahrnout soubor do skriptu bash shell

  2. URL kódující řetězec ve skriptu bash

  3. Jak opakovaně spouštět bash skript každých N sekund?

  1. Jak ladit Bash skript?

  2. Jak nastavit parametry, když Pipe Bash Script to Bash?

  3. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?