Как использовать sed для удаления десятичных чисел из строки? - PullRequest
4 голосов
/ 29 июня 2011

У меня есть следующая строка в качестве примера: ех. «Заброшенный 16 1,10 2,62 3,50»

Я бы хотел передать этот результат в sed и удалить все десятичные числа, чтобы у меня осталось следующее: ех. "Заброшенный 16"

Я использовал следующую команду: sed 's / . // g' который, очевидно, не работает.

Может кто-нибудь сообщить мне, как использовать подстановочный знак с символом sed для удаления всего, что соответствует ". ".

Спасибо

Ответы [ 3 ]

5 голосов
/ 29 июня 2011

Вы не сказали, что вы хотите сделать с пробелами, но как насчет

sed -e 's/[0-9]*\.[0-9]*//g' -e 's/ *$//'
1 голос
/ 29 июня 2011

это было бы проще с awk, по крайней мере, для меня

echo "Abandoned 16 1.10 2.62 3.50" | awk '{print $1FS$2}'

но список чисел потом случайный?

если так, это тоже работает

echo "Abandoned 16 1.10 2.62 3.50" | sed -r 's/\s([0-9]+)\.([0-9]+)//g'

обратите внимание, что \s ловит пробел и что числа до и после десятичного знака сохраняются, поэтому, если вы хотите сохранить их и что-то с ними сделать, вы можете получить к ним доступ с помощью \1 и \2 с уважением

Зачем ловить белый сок? хорошо представьте, что если 16 пришло после 3.50 в вашем примере, вы бы вернули

Abandoned [5spaces*] 16 * Я могу вставить только один пробел в этом <textarea>

0 голосов
/ 29 июня 2011

Создание решения awk, которое зацикливает ввод и пропускает записи с точкой в ​​них

{
     printf("%s ", $1)
     for(i=2;i<NF;i++) {
         if ($i !~ /\./) {
             printf( " %s ", $i)
         }
     }
}

$ echo Abandoned 16 1.10 2.62 3.50 | awk -f f.awk 
Abandoned  16 
...