Извлечь все числа из строки в списке

Учитывая некоторую строку 's', я хотел бы извлечь из этой строки только числа. Я хотел бы, чтобы выведенные числа были разделены одним пробелом.

Пример ввода -> вывода

....ВХОД:1,2,3
ВЫХОД:1 2 3

....ВХОД:1 2 a b c 3
ВЫХОД:1 2 3

....ВХОД:ab#35jh71 1,2,3 kj$d3kjl23
ВЫХОД:35 71 1 2 3 3 23

Я пробовал комбинации grep -o [0-9] и grep -v [a-z] -v [A-Z], но проблема в том, что между числами можно было использовать другие символы, такие как - и #. Независимо от количества нечисловых символов между числами, мне нужно, чтобы они были заменены одиночным пробелом.

Я также экспериментировал с awk и sed, но мне не повезло.


person Lenna    schedule 09.06.2020    source источник


Ответы (2)


Не уверен насчет пробелов в вашем ожидаемом выводе, основываясь на показанных вами образцах, не могли бы вы попробовать следующее.

awk '{gsub(/[^0-9]+/," ")} 1' Input_file

Объяснение. Глобальная замена всего, кроме цифр, пробелами. Упоминание 1 напечатает текущую строку.



Если вы хотите удалить начальный/начальный пробел и конечный пробел в выводе, попробуйте выполнить следующее.

awk '{gsub(/[^0-9]+/," ");gsub(/^ +| +$/,"")} 1' Input_file

Объяснение. Глобальная замена всего, кроме цифр, пробелами в текущей строке, а затем глобальная замена начального и конечного пробелов на NULL в текущей строке. При упоминании 1 будет напечатана отредактированная/неотредактированная текущая строка.

person RavinderSingh13    schedule 09.06.2020

person    schedule
comment
Должно быть tr -sc '[:digit:]' ' ' - person ; 09.06.2020
comment
Это решение отличное! Очень кратко и легко читается! Не могли бы вы добавить раздел Объяснение, чтобы объяснить, как работает -sc и регулярное выражение, которое вы использовали? - person Lenna; 10.06.2020