Извлечь целое число из строки, используя bash - PullRequest
11 голосов
/ 17 июня 2011

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

ABC3
DFGSS34
CVBB3

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

3
34
3

??

Ответы [ 4 ]

25 голосов
/ 17 июня 2011

Простая команда sed выполнит эту работу:

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

OUTPUT

3
34
3
13 голосов
/ 17 июня 2011

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

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 решения, но имеет то преимущество, что нет необходимости разбивать другой процесс. Это, вероятно, не важно для небольших работ, но у меня были ситуации, когда такого рода вещи делались со многими, многими строками файла, и отсутствие разветвления - существенное повышение скорости.

8 голосов
/ 17 июня 2011

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

for s in ABC3 DFGSS34 CVBB3 ; do
    tr -cd 0-9 <<<"$s"
    echo
done
7 голосов
/ 17 июня 2011

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

grep -o '[0-9]*' file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...