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

26

É possível passar uma cadeia relativamente grande para grepou pode aceitar apenas um arquivo?

Observe que não estou falando sobre a saída de canal para grep, mas fazendo algo como:

grep 'hello' 'hello world'

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

user2018084
fonte
Talvez canalize algum tipo de dados de texto grep? Então, talvez algo como printf "various\ntext to grep here" | grep "text"irá produzir "texto para grep aqui"
Alex

Respostas:

31

É possível. Tente o seguinte:

grep 'hello' <<< 'hello world'

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

str='hello world'
grep 'hello' <<< $str
Kiki Luqman Hakiem
fonte
5
Para referência, esta é uma string here . Você pode ler mais aqui .
Rockallite 07/02
1
citação do wiki: disponível no bash , ksh ou zsh
hoijui 16/07
13

grepnão tem uma opção para interpretar seus argumentos de linha de comando como texto a ser pesquisado. A maneira normal de grepuma string é canalizar a string para grepa entrada padrão:

$ 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 echoseqüências de caracteres contendo mais de uma linha de texto. Você pode até 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?

Kenster
fonte