Extrai linhas do texto com string como entrada

2

Como pode extrair linhas que correspondam à string de expressão regular ^li do texto (não um arquivo) abaixo usando sed ou algo assim?

 linux
 loan
 litmus
 launch

Eu tentei grep , mas não consegui encontrar uma maneira de pesquisar em um texto citado, não em um arquivo de texto.

grep -n -i "^li" "linux
loan
litmus
launch" 

Retorna No such file or directory . E eu não quero salvar este texto como um arquivo antes de pesquisar, se possível.

    
por stacko 22.01.2016 / 18:17

3 respostas

3

Você precisa usar um altar ( <<< ) aqui para passar a string como entrada para grep , herestring retorna um descritor de arquivo, grep pode então operar:

$ grep -ni "^li" <<<"linux
loan
litmus
launch"

Saída:

1:linux
3:litmus

Se o seu shell não suporta herestrings, muitos shells não, você pode imprimir sua string e canalizá-la para grep :

$ echo "linux
loan
litmus
launch" | grep -n -i "^li"
1:linux
3:litmus

Ou use heredoc ( << ):

$ grep -ni "^li" <<EOF
> linux
> loan
> litmus
> launch
> EOF
1:linux
3:litmus
    
por 22.01.2016 / 18:24
0

Você pode apenas fazer:

grep \^li

E comece a digitar suas coisas. grep lerá o terminal. sed fará o mesmo. Use CTRL+D para pará-los e ... >saved_output_file de redirecionamentos de saída para salvar os efeitos.

    
por 22.01.2016 / 19:17
0

Com sed , você pode usar o sed -n '/^li/p'

Usando o exemplo @emaemayl

$ echo "linux
> loan
> litmus
> launch" | sed -n '/^li/p'
linux
litmus
    
por 22.01.2016 / 19:10