2016-06-20 7 views
0

У меня есть файл, где мне нужны только цифры [0-9]. У меня есть эта команда sed 's/[^0-9]*//g', которая удаляет все, что не является [0-9], но мне нужно только удалить все, что осталось от «,»Удалить нечисловые значения - Unix

У меня есть это сейчас, но это не работает, как я думаю, это должно ...

sed -ri "s/[^0-9]+\,/,/g" 
+0

Я теперь ' sed -ri 's/[^ 0-9]. *, /, /' ', который удаляет что-либо из первого нечислового числа до«, », которое выглядит так: 13513asdf4134,344 до 13513,344, когда мне нужно это выглядит как 135134134,344 –

+0

Я бы ожидал '/ s^0-9. \ (. *, \)/\ 1/g'', но, похоже, это не ... – Beta

+0

Любая идея, что попробовать? Я пробовал кучу разных вещей, но ничего не работает. @Beta –

ответ

0

Как я уже сказал в комментарии выше, я не понимаю, почему 's/[^0-9].\(.*,\)/\1/g' не работает, но есть альтернативы.

Мы можем использовать t (тест), чтобы делать то, что я ожидал g сделать:

sed -e:a -e 's/[^0-9].\(.*,\)/\1/;ta' 

Или использовать трюм (избыточно, но он работает):

sed 'h;s/.*,/,/;x;s/,.*//;s/[^0-9].//g;G;s/\n//' 
+0

Это отлично работает, но после любой буквы удаляется одна цифра. '12345abcd6789,123' перейдет к' 12345789,123' и потеряет 6 по какой-то нечетной причине. @Beta –

+0

@AdamHorn: Эти команды не удаляют 6 для меня. Вы знаете, какую версию sed вы используете? Мы могли бы сделать некоторые эксперименты ... – Beta

+0

Как узнать, какую версию sed я использую? @Beta –

Смежные вопросы