O comando que você está usando deve funcionar como está com o GNU sed
. Mas com o BSD sed
, que por exemplo vem com o OS X, não será.
-
Se você está tentando usar Expressões regulares estendidas - que suportam o
+
metacaractere - você precisa explicitamente habilitá-los. Para BSDsed
, faça isso comsed -E
e para GNUsed
comsed -r
.O
\+
sozinho faz com o GNUsed
quando os EREs não estão ativados, mas isso é menos portável. -
Você está usando o Perl-like
\s
, que não existe para Expressões regulares básicas e estendidas. Osed
normal não suporta expressões regulares Perl. O GNUsed
suporta o\s
- mas seria mais portável simplesmente adicionar o espaço à sua expressão regular. -
Por fim, seu
.
corresponde a um caractere, portanto, seu regex corresponderia a qualquer caractere daquele lugar, não apenas um ponto. Use\.
para escapar corretamente.
Então, uma solução seria, para o GNU sed
:
$ echo "2.12 blah" | sed -r 's/^[0-9]+\.[0-9]+ //'
blah
Ou para o BSD sed
:
$ echo "2.12 blah" | sed -E 's/^[0-9]+\.[0-9]+ //'
blah
Dessa forma, você não precisa de um regex diferente para versões diferentes de sed
. Com o seu exemplo:
$ 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
Se o problema real é que você deseja obter a segunda coluna de um arquivo delimitado por espaço em branco, então você está indo sobre isso da maneira errada. Use awk
, como o @Srdjan Grubor, ou use cut
:
$ echo "2.12 foo bar baz" | cut -d' ' -f2-
foo bar baz
O -f2-
especifica a segunda e todas as colunas a seguir, portanto, basicamente, ocupará o primeiro espaço como separador e exibirá o restante.