Извлечь целое число из строки с помощью bash

Я попытался найти решение здесь, но не смог; заданные строки типа

ABC3
DFGSS34
CVBB3

как извлечь целые числа, чтобы получить

3
34
3

??

Ответ 1

Просто простая команда sed выполнит задание:

sed 's/[^0-9]//g' file.txt

OUTPUT

3
34
3

Ответ 2

Для решения bash -only вы можете использовать подстановку параметров:

pax$ xyz=ABC3 ; echo ${xyz//[A-Z]/}
3
pax$ xyz=DFGSS34 ; echo ${xyz//[A-Z]/}
34
pax$ xyz=CVBB3 ; echo ${xyz//[A-Z]/}
3

Он очень похож на решения sed, но имеет то преимущество, что ему не нужно разветвлять другой процесс. Это, вероятно, не важно для небольших рабочих мест, но у меня были ситуации, когда такого рода вещи выполнялись для многих, многих строк файла и не-forking - значительное ускорение скорости.

Ответ 3

Как насчет использования tr?

for s in ABC3 DFGSS34 CVBB3 ; do
    tr -cd 0-9 <<<"$s"
    echo
done

Ответ 4

Как насчет версии grep?

grep -o '[0-9]*' file.txt