Как удалить все нечисловые символы из строки в BASH? Пример: file="123 hello" Как отредактировать строковый файл так, чтобы он содержал только цифры и текстовая часть была удалена? Итак, echo $file должен печатать только 123. Ответ 1 Это один из способов с sed: $ echo $file | sed 's/[^0-9]*//g' 123 $ echo "123 he23llo" | sed 's/[^0-9]*//g' 12323 Или с чистым bash: $ echo "${file//[!0-9]/}" 123 $ file="123 hello 12345 aaa" $ echo "${file//[!0-9]/}" 12312345 Чтобы сохранить результат в самой переменной, сделайте $ file=$(echo $file | sed 's/[^0-9]*//g') $ echo $file 123 $ file=${file//[!0-9]/} $ echo $file 123 Ответ 2 Вы можете сказать: echo ${file%%[^0-9]*} Однако в некоторых случаях это сталкивается с проблемами: $ file="123 file 456" $ echo ${file%%[^0-9]*} 123 Использование tr: $ file="123 hello 456" $ new=$(tr -dc '0-9' <<< $file) $ echo $new 123456
Ответ 1 Это один из способов с sed: $ echo $file | sed 's/[^0-9]*//g' 123 $ echo "123 he23llo" | sed 's/[^0-9]*//g' 12323 Или с чистым bash: $ echo "${file//[!0-9]/}" 123 $ file="123 hello 12345 aaa" $ echo "${file//[!0-9]/}" 12312345 Чтобы сохранить результат в самой переменной, сделайте $ file=$(echo $file | sed 's/[^0-9]*//g') $ echo $file 123 $ file=${file//[!0-9]/} $ echo $file 123
Ответ 2 Вы можете сказать: echo ${file%%[^0-9]*} Однако в некоторых случаях это сталкивается с проблемами: $ file="123 file 456" $ echo ${file%%[^0-9]*} 123 Использование tr: $ file="123 hello 456" $ new=$(tr -dc '0-9' <<< $file) $ echo $new 123456