Используемая вами команда должна работать как есть с GNU sed . Но с BSD sed , который, например, поставляется с OS X, не будет.
Если вы пытаетесь использовать расширенные регулярные выражения - которые поддерживают метасимвол + - вам необходимо явно включить их. Для BSD sed вы делаете это с помощью sed -E , а для GNU sed с помощью sed -r .
Один только \+ делает с GNU sed когда ERE не включены, но это менее переносимо.
Вы используете Perl-подобные \s , которых нет ни для базовых, ни для расширенных регулярных выражений. Regular sed не поддерживает регулярные выражения Perl. GNU sed поддерживает \s - но было бы более переносимо просто добавить пробел к вашему регулярному выражению.
Наконец, твой . соответствует одному символу, поэтому ваше регулярное выражение будет соответствовать любому символу в этом месте, а не только точке. Используйте \. чтобы правильно избежать этого.
Таким образом, решение для GNU sed:
$ echo "2.12 blah" | sed -r 's/^[0-9]+\.[0-9]+ //'
blah
Или для BSD sed:
$ echo "2.12 blah" | sed -E 's/^[0-9]+\.[0-9]+ //'
blah
Таким образом, вам не нужно другое регулярное выражение для разных версий sed . С вашим примером:
$ cat test
3.15 Chichewa
3.16 Chimane
3.17 Cinghalais
3.18 Créole de Guinée-Bissau
$ sed -r 's/^[0-9]+\.[0-9]+ //' test
Chichewa
Chimane
Cinghalais
Créole de Guinée-Bissau
Если реальная проблема заключается в том, что вы хотите получить второй столбец файла, разделенного пробелами, то вы поступите неправильно. Либо используйте awk , как говорит @Srdjan Grubor, либо используйте cut:
$ echo "2.12 foo bar baz" | cut -d' ' -f2-
foo bar baz
Параметр -f2- указывает второй и все последующие столбцы, поэтому в качестве первого разделителя он будет взят в качестве первого пробела, а остальные будут выведены.