Passez une (grande) chaîne à 'grep' au lieu d'un nom de fichier

26

Est-il possible de passer une chaîne relativement volumineuse à grepou ne peut-il accepter qu'un fichier?

Notez que je ne parle pas de canaliser la sortie vers grep, mais de faire quelque chose comme:

grep 'hello' 'hello world'

(ce qui bien sûr ne fonctionne pas, du moins pas comme ça)

user2018084
la source
Peut-être acheminez-vous une sorte de données texte grep? Alors peut-être que quelque chose comme ça printf "various\ntext to grep here" | grep "text"produira du "texte à grep ici"
Alex

Réponses:

31

C'est possible. Essaye ça:

grep 'hello' <<< 'hello world'

Vous pouvez également passer une variable contenant une chaîne à la place:

str='hello world'
grep 'hello' <<< $str
Kiki Luqman Hakiem
la source
5
Pour référence, il s'agit d'une chaîne ici . Vous pouvez en lire plus ici .
Rockallite
1
citation du wiki: disponible en bash , ksh ou zsh
hoijui
13

grepn'a pas la possibilité d'interpréter ses arguments de ligne de commande comme du texte à rechercher. La manière normale d'accéder à grepune chaîne consiste à diriger la chaîne vers grepl'entrée standard de:

$ 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.
$

Comme vous le voyez ici, vous pouvez echoutiliser des chaînes contenant plusieurs lignes de texte. Vous pouvez même les saisir de manière interactive dans le shell, si vous le souhaitez.

Si cela ne répond pas à vos besoins, vous pourriez peut-être expliquer pourquoi la tuyauterie n'est pas une solution acceptable?

Kenster
la source