Przekaż (duży) ciąg do „grep” zamiast nazwy pliku

26

Czy możliwe jest przekazanie stosunkowo dużego ciągu znaków, grepczy może on zaakceptować tylko plik?

Zauważ, że nie mówię o przesyłaniu danych wyjściowych do grep, ale robię coś takiego:

grep 'hello' 'hello world'

(co oczywiście nie działa, przynajmniej tak nie jest)

user2018084
źródło
Może przesłać jakieś dane tekstowe grep? Może więc coś takiego printf "various\ntext to grep here" | grep "text"wytworzy „tekst do grepowania”
Alex

Odpowiedzi:

31

To jest możliwe. Spróbuj tego:

grep 'hello' <<< 'hello world'

Zamiast tego możesz przekazać zmienną zawierającą ciąg znaków:

str='hello world'
grep 'hello' <<< $str
Kiki Luqman Hakiem
źródło
5
Dla odniesienia jest to ciąg tutaj . Możesz przeczytać więcej tutaj .
Rockallite,
1
cytat z wiki: dostępny w bash , ksh lub zsh
hoijui
13

grepnie ma opcji interpretowania argumentów wiersza poleceń jako tekstu do przeszukania. Normalny sposób na grepłańcuch to potokowanie łańcucha do grepstandardowego wejścia:

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

Jak widać tutaj, możesz echociągów znaków zawierających więcej niż jeden wiersz tekstu. Możesz nawet wpisać je interaktywnie do powłoki, jeśli chcesz.

Jeśli to nie spełnia twoich potrzeb, być może możesz wyjaśnić, dlaczego orurowanie nie jest akceptowalnym rozwiązaniem?

Kenster
źródło