web-dev-qa-db-fra.com

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

Est-il possible de passer une chaîne relativement longue à grep ou peut-il uniquement accepter un fichier?

Notez que je ne parle pas de la sortie de tuyauterie vers grep, mais plutôt de faire quelque chose comme:

grep 'hello' 'hello world'

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

24
user2018084

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
29
Kiki Luqman Hakiem

grep n'a pas l'option d'interpréter ses arguments de ligne de commande en tant que texte à rechercher. La méthode normale pour grep une chaîne consiste à la canaliser vers l'entrée standard 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.
$

Comme vous le voyez ici, vous pouvez echo chaînes contenant plus d'une ligne 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.

12
Kenster

Ajoutez-le dans grep

Pourquoi pas simplement:

echo 'hello world' | grep 'hello'

Voir aussi: https://stackoverflow.com/questions/2106526/how-can-i-grep-complex-strings-in-variables