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)


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

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?


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.