Regexando uma lista de caracteres em sed

0

Eu tenho uma lista de chars:

11183 11183 1 0 0 0 0 false -- "-"

Se eu quiser levar tudo até o falso (inclusive) com grep eu uso:

grep -o '[0-9].* [a-z]* '

Qual é o análogo em sed ?

    
por Josef Klimuk 13.03.2018 / 13:09

2 respostas

1

A sintaxe dessa expressão regular em sed é idêntica. Por exemplo, se você quiser substituir as cadeias de caracteres correspondentes a essa expressão regular, poderá usar o comando substituto da seguinte maneira ( s/<old>/<new>/ ):

$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed 's/[0-9].* [a-z]* /_THE_NEW_STRING_/'
_THE_NEW_STRING_-- "-"

É claro que você pode usar expressões regulares estendidas -r , --regexp-extended para facilitar sua vida em alguns casos:

$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed -r 's/([0-9].* [a-z]* ).*//'
11183 11183 1 0 0 0 0 false 

$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed -r 's/([0-9].* [a-z]* )(.*)/ /'
-- "-" 11183 11183 1 0 0 0 0 false 
    
por pa4080 13.03.2018 / 13:22
2

Este comando sed retornará qualquer coisa ( .* ) do início da linha ( ^ ), até e incluindo a primeira ocorrência de false excluindo o restante ( .*$ ).

sed -r 's/^(.*\<false\>).*$//'
    
por RoVo 13.03.2018 / 13:36