Passa uma string (grande) para 'grep' em vez de um nome de arquivo

19

É possível passar uma string relativamente grande para grep ou só aceita um arquivo?

Note que não estou falando de piping output para grep, mas fazendo algo como:

grep 'hello' 'hello world'

(o que obviamente não funciona, pelo menos não é assim)

    
por user2018084 02.05.2014 / 05:04

3 respostas

22

É possível. Tente isto:

grep 'hello' <<< 'hello world'

Você também pode passar uma variável contendo uma string:

str='hello world'
grep 'hello' <<< $str
    
por 12.09.2015 / 18:19
10

grep não tem uma opção para interpretar seus argumentos de linha de comando como texto a ser pesquisado. O caminho normal para grep uma string é canalizar a string para a entrada padrão de grep :

$ echo 'There once was a man from Nantucket
Who kept all his cash in a bucket.
    But his daughter, named Nan,
    Ran away with a man
And as for the bucket, Nantucket.' | grep -i nan
There once was a man from Nantucket
    But his daughter, named Nan,
And as for the bucket, Nantucket.
$

Como você vê aqui, você pode echo strings contendo mais de uma linha de texto. Você pode até mesmo digitá-los no shell interativamente, se quiser.

Se isso não atender às suas necessidades, talvez você possa explicar por que a tubulação não é uma solução aceitável?

    
por 02.05.2014 / 16:58
1

Envie para grep

Por que não apenas:

echo 'hello world' | grep 'hello'

Veja também: link

    
por 01.06.2017 / 18:13