पहले पैरामीटर के रूप में xargs पास करें


53

मैं इस व्यवहार का उत्पादन करने की कोशिश कर रहा हूँ:

grep 192.168.1 *.txt

Xargs के माध्यम से grep में एक स्ट्रिंग पास करके लेकिन यह पहले पैरामीटर के बजाय अंत में चल रहा है।

echo 192.168.1 | xargs grep  *.txt

मुझे आने वाले स्ट्रिंग को अंत के बजाय 'grep' और '*' के बीच लगाने के लिए xargs (या कुछ इसी तरह) को बताने की आवश्यकता है।

मैं यह कैसे करु?


जवाबों:


83
$ echo 192.168.1. | xargs -I{} grep {} *.txt

उदाहरण

नमूना फ़ाइलें:

$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1

उदाहरण रन:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.

धन्यवाद, यह काम करता है। पर क्यों? क्या आप के साथ बदल रहे हैं -I? मुझे नहीं मिला।
e18r

6
ऐसा लगता है कि घुंघराले कोष्ठक एक स्थान धारक हैं। आप अपनी पसंद के अनुसार {} को प्रतिस्थापित कर सकते हैं: इको 192.168.1। | xargs मैं pholder ग्रेप pholder * .txt
denormalizer

3

एक और तरीका:

find . -name \*.txt -print0 | xargs -0 grep 192.168.1

यह बहुत अधिक फ़ाइल नामों के साथ शेल की कमांड लाइन की लंबाई को ओवरफ्लो नहीं करेगा। भ्रामक xargs/ grepफ़ाइल नामों से बचने के लिए जिनके पास रिक्त स्थान हैं, -print0और -0विकल्प LF के बजाय प्रत्येक को एक अशक्त नाम के साथ मिला देंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.