Übergeben Sie eine (große) Zeichenfolge anstelle eines Dateinamens an 'grep'

26

Ist es möglich, eine relativ große Zeichenfolge zu übergeben, grepoder kann nur eine Datei akzeptiert werden?

Beachten Sie, dass ich nicht über die Weiterleitung der Ausgabe an grep spreche, sondern etwa Folgendes tue:

grep 'hello' 'hello world'

(was natürlich nicht geht, jedenfalls nicht so)

user2018084
quelle
Vielleicht leiten Sie eine Art Textdaten an grep? Also wird vielleicht so etwas wie printf "various\ntext to grep here" | grep "text""Text, der hier grep" produziert
Alex

Antworten:

31

Es ist möglich. Versuche dies:

grep 'hello' <<< 'hello world'

Sie können stattdessen auch eine Variable übergeben, die eine Zeichenfolge enthält:

str='hello world'
grep 'hello' <<< $str
Kiki Luqman Hakiem
quelle
5
Als Referenz ist dies eine Here-Zeichenfolge . Sie können hier mehr lesen .
Rockallite
1
Zitat aus dem Wiki: verfügbar in bash , ksh oder zsh
hoijui
13

grepEs gibt keine Option, die Befehlszeilenargumente als zu durchsuchenden Text zu interpretieren. Der normale Weg zu grepeinem String besteht darin, den String in grepdie Standardeingabe zu leiten:

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

Wie Sie hier sehen, können Sie echoZeichenfolgen verwenden, die mehr als eine Textzeile enthalten. Sie können sie sogar interaktiv in die Shell eingeben, wenn Sie möchten.

Wenn dies nicht Ihren Anforderungen entspricht, könnten Sie vielleicht erklären, warum Rohrleitungen keine akzeptable Lösung sind?

Kenster
quelle