Почему дополнительное пространство удаляет в sed команде замены

У меня есть файл данных, который имеет следующие данные в нем:

abcd.vc.9902 03493092 90239 m
abc 131323 78202 g
cdb.5491-3 03402394 23241 k

Я пытаюсь удалить цифры, которые начинаются с пространства. Таким образом, команда, которую я записал, была

sed 's/ [0-9]*//g' data

Это производит следующий вывод

abcd.vc.9902m
abcg
cdb.5491-3k

Если Вы замечаете, это избавилось от пространства перед последней буквой. Вывод, которого я требую:

abcd.vc.9902 m
abc g
cdb.5491-3 k
2
задан 15 February 2016 в 01:56

1 ответ

Просто замена * с + (и Escape это, если Вы используете всего sed, не sed -r, как +, является расширенный шаблон Regex):

sed 's/ [0-9]\+//g' data

Или

sed -r 's/ [0-9]+//g' data

В Regex * указывает на нуль или больше соответствия предыдущего маркера, таким образом, в Вашем случае, если там не идет ни в какое сравнение т.е. никакие цифры после пространства то, что это было согласованным также.

, С другой стороны, если Вы используете +, Вы соответствуете (по крайней мере) одной или нескольким цифрам после пространства, таким образом, Вы получите желаемый результат.

4
ответ дан 2 December 2019 в 02:19

Другие вопросы по тегам:

Похожие вопросы: