एक फ़ाइल नाम के बजाय 'grep' के लिए एक (बड़ा) स्ट्रिंग पास करें


26

क्या एक अपेक्षाकृत बड़े स्ट्रिंग को पास करना संभव है grepया यह केवल एक फ़ाइल को स्वीकार कर सकता है?

ध्यान दें कि मैं grep को पाइपिंग आउटपुट के बारे में बात नहीं कर रहा हूं, लेकिन कुछ ऐसा कर रहा हूं:

grep 'hello' 'hello world'

(जो निश्चित रूप से काम नहीं करता है, कम से कम ऐसा नहीं है)


हो सकता है कि किसी प्रकार के पाठ डेटा को पाइप करें grep? तो शायद कुछ इस तरह printf "various\ntext to grep here" | grep "text""पाठ यहाँ grep करने के लिए" का उत्पादन होगा
एलेक्स

जवाबों:


31

यह संभव है। इसे इस्तेमाल करे:

grep 'hello' <<< 'hello world'

आप इसके बजाय स्ट्रिंग वाला एक चर भी पास कर सकते हैं:

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

5
संदर्भ के लिए, यह यहां एक स्ट्रिंग है । आप यहाँ और पढ़ सकते हैं ।
रॉकलाईट

1
: विकी है बोली में उपलब्ध बैश , ksh , या zsh
hoijui

13

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.