Передайте (великий) рядок "grep" замість імені файлу


24

Чи можна передати відносно велику рядок grep чи може він тільки прийняти файл?

Зауважте, що я не говорю про виведення каналів у grep, але роблю щось подібне:

grep 'hello' 'hello world'

(що, звичайно, не працює, принаймні не так)


Можливо, вкажіть певні текстові дані grep? Так може бути щось подібне printf "various\ntext to grep here" | grep "text" вироблятиме "текст для grep тут"
Alex

Відповіді:


27

Це можливо. Спробуйте це:

grep 'hello' <<< 'hello world'

Також можна передавати змінну, що містить рядок:

str='hello world'
grep 'hello' <<< $str

2
Для довідки, це a тут рядок . Ви можете прочитати більше тут .
Rockallite

11

grep не має можливості інтерпретувати аргументи його командного рядка як текст, який слід шукати. Звичайний шлях grep рядок вказує рядок у 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.
$

Як ви бачите тут, ви можете echo рядки, що містять більше одного рядка тексту. Ви навіть можете ввести їх у оболонку інтерактивно, якщо хочете.

Якщо це не відповідає вашим потребам, можливо, ви могли б пояснити, чому трубопроводи не є прийнятним рішенням?


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.