GNU/Linux >> Znalost Linux >  >> Linux

Vraťte shodu s regulárním výrazem ve skriptu Bash namísto jeho nahrazení

echo "TestT100String" | sed 's/[^0-9]*\([0-9]\+\).*/\1/'

echo "TestT100String" | grep -o  '[0-9]\+'

Metoda, kterou použijete k vložení výsledků do pole, závisí poněkud na tom, jak jsou skutečná data načítána. Ve vaší otázce není dostatek informací, abychom vás mohli dobře nasměrovat. Zde je však jedna metoda:

index=0
while read -r line
do
    array[index++]=$(echo "$line" | grep -o  '[0-9]\+')
done < filename

Zde je další způsob:

array=($(grep -o '[0-9]\+' filename))

Můžete to udělat čistě v bash pomocí dvojité hranaté závorky [[ ]] testovací operátor, který ukládá výsledky do pole nazvaného BASH_REMATCH :

[[ "TestT100String" =~ ([0-9]+) ]] && echo "${BASH_REMATCH[1]}"

Linux
  1. Jak ladit Bash skript?

  2. Bash Echo Příkazový řádek spuštěn na samotném příkazovém řádku (ne ve skriptu)?

  3. Neočekávané Eof při hledání shody „““ – Bash Script?

  1. Čtěte řádek po řádku v bash skriptu

  2. Simulace stisknutí klávesy ENTER ve skriptu bash

  3. Tiskový výstup příkazu cat ve smyčce skriptu bash

  1. Bash Shell Script - Zkontrolujte, zda nemáte příznak a zjistěte jeho hodnotu

  2. Variabilní rozsah pro skripty bash shell a funkce ve skriptu

  3. Jak zkontrolovat, zda soubor existuje v konkrétním adresáři ve skriptu bash?