मैं 'grep' को ps परिणामों में दिखाने से कैसे रोक सकता हूँ?


304

जब मैं किसी ऐसी प्रक्रिया को खोजता हूं जो मौजूद नहीं है, जैसे

$ ps aux | grep fnord                          
wayne    15745  0.0  0.0  13580   928 pts/6    S+   03:58   0:00 grep fnord

जाहिर है मैं grep के बारे में परवाह नहीं है - इस psप्रक्रिया के लिए खोज के रूप में ज्यादा समझ में आता है!

मैं परिणामों में दिखावा को कैसे रोक सकता हूं?


28
यदि आप एक प्रक्रिया का केवल पीआईडी की जरूरत है, तो आप बदल सकते हैं ps aux |grepके साथ pgrep(या pgrep -f)।
जोफेल

6
Serverfault और Superuser पर समान प्रश्न ।
थोर

क्या यह आउटपुट वैध है? ऐसा लगता है fnord चल नाम का कोई कार्यक्रम वहाँ है कि ...
अनुचर

4
@acolyte, यह ठीक है - लेकिन क्योंकि यह grep में आउटपुट पाइप कर रहा है, grep चल रहा है (के आउटपुट की प्रतीक्षा में ps aux, मुझे उम्मीद है)। तो सवाल यह है कि कैसे को रोकने के लिए है grep fnordएक चल प्रक्रिया के रूप में स्पष्ट रूप से, क्योंकि मैं में कोई दिलचस्पी नहीं हूँ को दिखाई देने से कि एक।
वेन वर्नर

2
@acolyte यह आश्चर्य की बात नहीं है कि आप "fnord" लाइन नहीं देख सकते हैं। आप इसे देखने में सक्षम नहीं हैं। यदि आपके पास कुछ 2 या 3 मिनट हैं, तो उसे खोजें।
फ्रांसेस्को

जवाबों:


439

पता चला कि कीचेन में पाया जाने वाला घोल है ।

$ ps aux | grep "[f]nord"

ब्रैकेट के चारों ओर पत्र और कोट्स को स्ट्रिंग के चारों ओर लगाकर आप रेगेक्स की खोज करते हैं, जो कहता है, "वर्ण का पता लगाएं 'f' और उसके बाद 'nord'।"

लेकिन चूंकि आप कोष्ठक को 'f' में रखते हैं, इसलिए अब ']' का अनुसरण किया जाता है, इसलिए grepपरिणाम सूची में दिखाई नहीं देगा। Neato!


26
@acolyte: ps से आउटपुट के साथ समाप्त होने वाली लाइन शामिल होगी grep [f]nord। हालाँकि, वह लाइन grep फ़िल्टर के माध्यम से नहीं बनेगी, क्योंकि स्ट्रिंग [f]nordनियमित अभिव्यक्ति से मेल नहीं खाती है [f]nord
लार्स

9
@ लार्स दिलचस्प, धन्यवाद! मैंने सुझाव दिया है ps aux | grep fnord | grep -v grep... जो पहले से ही कुछ लोगों द्वारा सुझाया गया है ... lol
acolyte

5
@progo हाँ, आपको [बैश में भी उद्धृत करने की आवश्यकता है । fnordवर्तमान निर्देशिका में नामक फ़ाइल के साथ इसे आज़माएं ।
गाइल्स

25
उत्पादन को रोकना psएक पुरानी चाल हो सकती है, लेकिन यह अविश्वसनीय है। यदि उपलब्ध हो तो उपयोग करेंpgrep
गाइल्स

8
@naxa कल्पना कीजिए कि आपके पास एक प्रोग्राम कॉल fnordऔर एक प्रोग्राम है जिसे बुलाया गया है safnorde। या एक उपयोगकर्ता को बुलाया जाता है bfnord, और आप उसकी सभी प्रक्रियाओं को समाप्त करते हैं। आदि
जिल्स

163

एक अन्य विकल्प जो मैं उपयोग करता हूं (विशेषकर सिर्फ यह देखने के लिए कि क्या कोई प्रक्रिया चल रही है) pgrep कमांड है। यह एक मिलान प्रक्रिया की खोज करेगा, लेकिन खोज के लिए एक grep लाइन सूचीबद्ध नहीं करेगा। मुझे यह पसंद है क्योंकि यह खोज का एक त्वरित तरीका है, बिना किसी चीज के दोबारा भागना या बचना।

pgrep fnord

8
वे चाहेंगे कि -fविकल्प अधिक पसंद किया जाए ps | grep
जोर्डनम

@ जोर्डनम वास्तव में, pgrep -fअधिक पसंद आएगा ps -f | grep
18

5
-lमिलान करने के आदेश को दिखाने के लिए इसे बनाने का तर्क भी है ।
पैट्रिक

15
ps | grep '[f]nord'चतुर और आदरणीय है, लेकिन pgrep सही है
कोजीरो

3
आप हमेशा ऐसा कर सकते हैं ps $(pgrep cmd) ...यदि `pgrep विकल्प गायब है (यह कमांड के खाली सेट के लिए काम नहीं करेगा)।
मैकीज पीचोटका

62

आदर्श समाधान BriGuy द्वारा प्रस्तुत एक है

pgrep fnord 

लेकिन अगर आप ऐसा नहीं करना चाहते हैं, तो आप बस उन सभी लाइनों को बाहर कर सकते हैं जो grep के साथ मेल खाती हैं :

ps aux | grep -v grep | grep "fnord"

7
लेकिन क्या होगा अगर मैं जिस लाइन की तलाश कर रहा हूं वह है "बैश बैश ग्रीप बैश"?
स्पर्म 30'13 को

1
@Sparr तब आपको सबसे अच्छा समाधान का उपयोग करना चाहिए: pgrepया किसी अन्य को ढूंढना चाहिए ;)
RSFalcon7

Pgrep के साथ नाम की लंबाई सीमा के लिए देखें। पूर्ण पथ नाम प्राप्त करने के लिए -f का उपयोग करें या हो सकता है कि आप अपने मैचों को लंबे नामों के साथ विफल पाएं। -एल मैचों को सूचीबद्ध करने के लिए बहुत अच्छा है
नील मैकगिल

25

सबसे सुंदर समाधान नहीं है, लेकिन आप ऐसा कर सकते हैं:

$ ps aux | grep fnord | grep -v grep


यह बुरा जवाब है! क्योंकि अगर grepआपके वाक्यांश में कोई शब्द था । यह उस प्रक्रिया को नहीं दिखाएगा। उदाहरण के लिए, मान लीजिए कि किसी फ़ाइल foo_grep_bar.txtको nanoकमांड द्वारा संपादित किया जा रहा है । तो एक प्रक्रिया चल रही है: root 14908 0.0 0.0 110012 1692 pts / 3 S + Oct31 0:00 nano foo_grep_bar.txtइस उत्तर के अनुसार, यह काम नहीं करेगा: $ ps aux | grep nano | grep -v grepक्योंकि आपके फ़ाइल नाम में एक grep शब्द है।
नबी

मुझे यह पसंद है क्योंकि स्वीकृत उत्तर की तुलना में इसके इरादे के बारे में अधिक स्पष्ट और सभी मामलों में काम करता है।
समस्प्रिन

1
के अनुसार superuser.com/a/409658/450260 आप पूर्ण छोड़कर होना चाहिए grep fnordन कि केवल grepयानी $ ps aux | grep fnord | grep -v "grep fnord"
दावोस

15

Zsh में, grep fnord =(ps aux)

विचार यह है कि पहले चलाएं ps aux, परिणाम को किसी फ़ाइल में डालें, फिर grepउस फ़ाइल पर उपयोग करें । केवल, हमारे पास कोई फ़ाइल नहीं है, क्योंकि हम zsh के "प्रक्रिया प्रतिस्थापन" का उपयोग करते हैं।

समझाने के लिए, प्रयास करें

ps aux > ps.txt
grep fnord ps.txt
rm ps.txt

परिणाम वही होना चाहिए।

कुछ अन्य उत्तरों पर सामान्य टिप्पणी । कुछ जटिल और / या लंबे टाइप करने के लिए दूर हैं। यह केवल सही होने का मामला नहीं है, यह उपयोगी भी होना चाहिए। लेकिन इसका मतलब यह नहीं है कि उनमें से कुछ समाधान खराब हैं; केवल, उन्हें उपयोग योग्य बनाने के लिए उन्हें एक मिनी-यूआई के भीतर लपेटा जाना चाहिए।


1
Zsh की प्रक्रिया प्रतिस्थापन का पता नहीं, लेकिन क्या यह निश्चित है कि दो प्रक्रियाओं को एक के बाद एक कहा जाता है और समानांतर में नहीं?
पाओलो एबरमन

3
@ PaŭloEbermann: समानांतर के लिए है <(command)grep grep =(ps aux)कोई रेखा नहीं दिखाता।
मैकीज पीचोटका

Zsh आउटपुट को ps से ¨match¨ भी कर सकता है। print -l ${(M)${(f)¨$(ps aux)¨}:#*fnord*}
फ्रार्टेक

7
ps aux | grep $(echo fnord | sed "s/^\(.\)/[\1]/g")

3
यह IOCCC की तरह दिखता है, लेकिन C ^ ^ के बजाय यूनिक्स कमांड लाइन के लिए बस | grep $(echo fnord)पर्याप्त नहीं था? आप अपने स्वयं के मूल्य के अनुसार "fnord" में प्रत्येक वर्ण को खोजने और बदलने के लिए sed से पूछते हैं? ^ ^ बधाई। मुझे यकीन है कि मैं एक और भी लंबे समय तक एक कर सकते हैं, लेकिन यह शायद के रूप में अजीब ^^ नहीं होगा
ओलिवर Dulac

1
मैं माफी माँगता हूँ क्योंकि मेरे उपरोक्त टिप्पणी के स्वर आक्रामक लग सकते हैं (और मैं इसे 5mn के बाद संपादित नहीं कर सकता) ... आपका जवाब वास्तव में एक हर्षित पढ़ा था, और मैं आपको बुरा दिखने की कोशिश नहीं कर रहा था। मुझे सच में लगता है कि आपने इसे इस तरह से किया था ^ ^
ओलिवियर दुलक

1
माफी न माँगें, आपका जवाब पढ़ने में वाकई मजेदार था (और सही पर हाजिर भी)। मेरा मतलब था pgrep -l $ 1 वैसे भी;)
yPhil

3
@OlivierDulac: वह केवल अपने मूल्य के साथ पहले चार को प्रतिस्थापित नहीं करता है; वह इसे वर्ग कोष्ठक के बीच अपने मूल्य के संघात के साथ प्रतिस्थापित करता है। (वे वर्गाकार कोष्ठक विशेष नहीं हैं, वे शाब्दिक हैं।) मूलतः, वह वेन वर्नर के उत्तर पर सामान्यीकरण कर रहे हैं, ताकि पहले वर्ण के चारों ओर वर्गाकार कोष्ठक लगाने की प्रक्रिया को लिपिबद्ध किया जा सके। +1
लार्स

2
ps aux | grep '[^]]fnord'उस जिम्नास्टिक से बचना होगा।
स्टीफन चेज़लस

6

GN यह उत्तर ग्नू-विशिष्ट है । अधिक सामान्य समाधान के लिए वेन का जवाब देखें ।

प्रक्रियाओं के लिए खोज

यदि आप केवल fnordप्रक्रियाओं की तलाश कर रहे हैं, तो आप -Cकमांड नाम से चयन करने के लिए विकल्प का उपयोग कर सकते हैं :

ps -C fnord

यह आपकी पसंद के हिसाब से BSD- और POSIX- शैली प्रारूप विकल्पों के साथ मिलाया जा सकता है। पूरी सूची के लिए पीएस मैन पेज देखें ।

कुछ और खोज रहे हो?

यदि आपको कमांड नाम के लिए एक सटीक खोज की तुलना में कुछ अधिक उन्नत की आवश्यकता है, तो आशा न करें! यह अभी भी psपाइप के किनारे पर किया जा सकता है । हमें केवल इतना करना है कि परिणाम से प्रक्रियाओं psको बाहर करना है grep:

ps -NC grep | grep 'fnord'

-C grepसभी grep प्रक्रियाओं का चयन करता है, और -Nचयन को नकारता है। इसका उपयोग कमांड तर्कों, एक कमांड नाम का हिस्सा या अधिक जटिल नियमित अभिव्यक्तियों की खोज के लिए किया जा सकता है।


1
यह GNU के साथ अच्छा है, psलेकिन -CPOSIX द्वारा निर्दिष्ट नहीं है और BSD पर पूरी तरह से अलग अर्थ रखता है
एरिक रेनॉफ

यह वास्तव में एक bummer है कोई बीएसडी समकक्ष नहीं है (जिसका अर्थ यह भी है कि यह मैक पर काम नहीं करेगा)। PS -C का उपयोग करना इनमें से किसी का भी सबसे सरल उत्तर है।
क्रिस्टोफर हंटर

3

मेरा उत्तर 'ps' सूची में "फ़ॉबर" की खोज के लिए विशिष्ट उत्तर पर एक भिन्नता है। "ए" "पी" का तर्क "ऑक्स" की तुलना में अधिक पोर्टेबल है, मेरा मानना ​​है, लेकिन यह परिवर्तन उत्तर के लिए अप्रासंगिक है। ठेठ जवाब इस तरह दिखता है:

$ ps -A -ww | grep [f]oobar

इसके बजाय मैं इस पैटर्न का उपयोग करता हूं:

$ ps -A -ww | grep [^]]foobar

मुख्य लाभ यह है कि इस पैटर्न के आधार पर स्क्रिप्ट लिखना आसान है, क्योंकि आप बस जिस भी पैटर्न की तलाश कर रहे हैं, उसके साथ एक स्टैटिक स्ट्रिंग "[^]" को संक्षिप्त करें। आपको स्ट्रिंग के पहले अक्षर को उतारने की ज़रूरत नहीं है और फिर इसे स्क्वायर ब्रेसिज़ के बीच डालें और फिर से उस बैक को फिर से जोड़ दें। जब शेल में स्क्रिप्टिंग करना आसान होता है, तो जिस पैटर्न को आप देख रहे थे, उसके सामने "[^]" चिपका दें। बैश में स्ट्रिंग टुकड़ा करना एक बदसूरत चीज है, इसलिए मेरी भिन्नता से बचा जाता है। यह भिन्नता उन पंक्तियों को दर्शाती है जहाँ पैटर्न एक प्रमुख दाएँ-वर्ग-कोष्ठक के बिना मेल खाता है]। चूँकि एक वर्ग ब्रैकेट को बाहर करने के लिए खोज पैटर्न वास्तव में वर्ग ब्रैकेट को पैटर्न में जोड़ता है तो यह कभी भी मेल नहीं खाएगा।

तो आप एक पोर्टेबल 'psgrep' कमांड निम्नानुसार लिख सकते हैं। यहां, मैं लिनक्स, ओएस एक्स बीएसडी और अन्य के बीच अंतर के लिए कुछ भत्ता बनाता हूं। यह 'ps' से कॉलम हेडर जोड़ता है, एक और अधिक कस्टम 'ps' प्रारूप प्रदान करता है जो मेरी ज़रूरतों को दांव पर लगाता है, और अतिरिक्त, अतिरिक्त विस्तृत को सूचीबद्ध करने वाली प्रक्रियाओं को प्रदर्शित करता है ताकि कोई भी कमांड-लाइन तर्क छूट न जाए। खैर, अधिकांश याद नहीं हैं। जावा जावा होने के नाते, यह अक्सर चीजों को सबसे खराब तरीके से करता है, इसलिए आप कुछ जावा सेवाओं को तर्क की अधिकतम अनुमत लंबाई से पहले चलाएंगे जो प्रक्रिया तालिका का ट्रैक रखेगा। मेरा मानना ​​है कि यह 1024 अक्षर है। कमांड-लोन की लंबाई एक प्रक्रिया शुरू करने की अनुमति दी गई है, लेकिन कर्नेल प्रक्रिया तालिका लंबाई में 1K से अधिक का कुछ भी ट्रैक रखने के लिए परेशान नहीं करती है। एक बार कमांड शुरू होने के बाद कमांड-नाम और तर्क सूची isn '

psgrep ()
{
    pattern=[^]]${1};
    case "$(uname -s)" in
        Darwin)
            ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
        ;;
        Linux)
            ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
        ;;
        *)  # other UNIX flavors get a minimalist version.
            ps -A -ww | grep -i -e ${pattern}
        ;;
    esac
}

2

ऐसा करने का सबसे सरल शेल-अज्ञेय तरीका यह होगा कि इसे पहले एक चर में संग्रहीत किया जाए:

PS_OUTPUT="$(ps aux)"; echo "$PS_OUTPUT" |grep fnord

कॉल-आउट: @ EmanuelBerg का grep fnord =(ps aux)जवाब अब तक सबसे सुरुचिपूर्ण है, हालांकि इसकी आवश्यकता है zsh। मैंने संक्षेप में इसे अपनी आरसी फाइलों में दिया था, लेकिन बैश एक शर्त के बावजूद भी उस वाक्यविन्यास के बारे में शिकायत करता है जो इसके मूल्यांकन को रोकना चाहिए।


मेरी rc फ़ाइलों से, मेरे पास केस-असंवेदनशील संस्करण है जो grep का आर्गन लेता है:

psl() {
  local PS_OUTPUT="$(ps auxww)"
  echo "${PS_OUTPUT%%$'\n'*}" >&2  # title, in stderr to avoid pipes
  echo "${PS_OUTPUT#*$'\n'}" |grep -i "${@:-^}"
}

कोड चलना, कोड की प्रति एक गोली:

  • क्रिया psआउटपुट को कैप्चर करें (एक localवेरिएबल में ताकि फंक्शन वापस आने पर वह चला जाए)
  • मानक त्रुटि में पहली पंक्ति (शीर्षक) प्रदर्शित करें ताकि परिणाम शीर्षक को प्रभावित किए बिना आगे फ़िल्टर किया जा सके। प्रतिस्थापन कहते हैं: $PS_OUTPUTपहली पंक्ति फ़ीड (regex equiv:) के बाद सब कुछ लें और निकालें s/\n.*$//msg। यह हमें शीर्षक को रोकने से रोकता है
  • पहली पंक्ति (regex equiv:) को छोड़करps सब कुछ के साथ आउटपुट प्रदर्शित करें और केस-असंवेदनशील के साथ इसकी सामग्री को संक्षिप्त करें और सभी तर्कों के साथ इस फ़ंक्शन को (बिना किसी तर्क के मामले में , जो किसी भी पंक्ति के प्रारंभ से मेल खाने के लिए दिया गया हो) सब कुछ)s/^.*\n//m-i^

1

शायद इस बार एक वास्तविक अनुक्रम का उपयोग करने का समय। पाइप का उपयोग इसे समानांतर बनाता है।

ps aux >f && grep tmpfs <f

बदसूरत क्योंकि एक फ़ाइल होगी f, लेकिन यह मेरी गलती नहीं है कि अनुक्रमिक प्रक्रियाओं के लिए कोई वाक्यविन्यास नहीं है जहां आप अभी भी पहले से चलने वाली प्रक्रिया के आउटपुट का उपयोग करना चाहते हैं।

अनुक्रमिक ऑपरेटर के सिंटैक्स के लिए सुझाव:

ps aux ||| grep tmpfs

आम लोगों की आसानी से एक धारा को फिल्टर करने में असमर्थता शायद ही अभिजात वर्ग के लिए खुद को दृश्यों के साथ आधार बनाने का एक कारण है। यह कंप्यूटिंग में एक कदम पीछे होगा।
एक्यूमेनस

@ABB en.wikipedia.org/wiki/Communicating_fterential_processes के थॉम्पसन शेल में समाप्त होने वाले की तुलना में कई अधिक ऑपरेटर हैं। बस एक ऑपरेटर हो सकता है जो अनुक्रमिक है, और जिसने इसके बाहर निकलते ही अनुक्रम में अगली प्रक्रिया के लिए अपने परिणाम का संचार किया। एक अतिरिक्त ऑपरेटर प्रदान करके "कंप्यूटिंग में पिछड़ा हुआ" थोड़ा कठोर लगता है।
ऐनी वैन रोसुम

अच्छा लिंक, लेकिन निश्चित रूप से अनुक्रमिक प्रसंस्करण सीपीयू और मेमोरी (या डिस्क) के उपयोग में खराब है - समानांतर प्रसंस्करण के सापेक्ष। इस उदाहरण में, यदि मुझे पहले सभी psआउटपुट को स्टोर करना चाहिए, तो मैं grepअधिक मेमोरी (या डिस्क) का उपयोग कर रहा हूं।
एक्यूमेनस

0

Pgrep कमांड, जैसा कि अन्य लोगों ने कहा है, नाम और अन्य विशेषताओं के आधार पर प्रक्रियाओं की PID (प्रक्रिया आईडी) लौटाएगा। उदाहरण के लिए,

pgrep -d, -u <username> <string>

आपको पीआईडी ​​देगा, सभी प्रक्रियाओं की अल्पविराम (,) द्वारा सीमांकित, जिसका नाम उपयोगकर्ता द्वारा चलाया जा रहा है <username>। केवल सटीक मिलान वापस करने के लिए आप -x स्विच का उपयोग कर सकते हैं।

यदि आप इन प्रक्रियाओं के बारे में अधिक जानकारी प्राप्त करना चाहते हैं (जैसे कि पीएस से औक्स विकल्प को चलाना), तो आप पीएस के साथ -p विकल्प का उपयोग कर सकते हैं, जो पीआईडी ​​पर आधारित है। इसलिए, उदाहरण के लिए,

ps up $(pgrep -d, -u <username> <string>)

pgrep कमांड द्वारा मिलान किए गए सभी PID की विस्तृत जानकारी देगा।


psयदि pgrepकोई खाली सेट लौटाता है तो विफल रहता है । मेरे पास एक उत्तर है जो आप पर बनता है और इस मुद्दे को हल करने की कोशिश करता है।
एक्यूमेनस

0

प्रक्रिया का ssh-agentपीआईडी ​​दिखाए बिना उपयोगकर्ता नाम के पीआईडी ​​खोजने के लिए यहां एक सरल उदाहरण grepहै:

ps xu | grep "${USER}.*[ ]/usr/bin/ssh-agent" | awk '{print $1 $2;}'

यदि आप उदाहरण के ssh-agentलिए वर्तमान उपयोगकर्ता को मारना चाहते हैं, तो आप निम्नलिखित आदेश का उपयोग कर सकते हैं:

kill `ps xu | grep "${USER}.*[ ]/usr/bin/ssh-agent" | awk '{print $2;}'`

एक आसान उपनाम बनाने के लिए अपने ~ /।

function function1 () {
    ps xu | grep "$1.*$2" | awk '{print $1" "$2" "$11;}'
}
alias mygrep="function1"

और यहाँ उपनाम का उपयोग करने के लिए सभी को नियमित अभिव्यक्ति सीखने के लिए मजबूर करने के उदाहरण हैं:

. /etc/profile #to make alias usable
mygrep ${USER} ${PROCESS_PATH}
mygrep ${USER} "[f]nord"
mygrep "[f]nord"
mygrep ".*[s]shd"

PS मैंने केवल उबंटू और जेंटू पर इन कमांडों का परीक्षण किया है।


(1) सवाल यह नहीं कहता है कि उपयोगकर्ता अपनी खुद की प्रक्रियाओं में से एक की तलाश कर रहा है - उपयोगकर्ता उस प्रक्रिया के मालिक को नहीं जान सकता है जिसे वह खोज रहा है। (२) जैसा कि यह उत्तर है कि यह कहा जाता है कि यह अभी भी असफल है "${USER}.* /usr/bin/ssh-agent"। यह काम करता है क्योंकि आपने कहा [ ]; यानी, आप केवल स्वीकृत उत्तर के तंत्र का उपयोग कर रहे हैं। आप बस के रूप में अच्छी तरह से कर सकते हैं grep "[s]sh-agent"
जी-मैन

तुम सही हो। (1) मैंने साझा किया जो कि उपयोगी हो सकता है क्योंकि मैंने खुद को इस पृष्ठ का सामना करते हुए एक बार देखा था (2) हां मैंने स्वीकार किए गए उत्तर में नियमित अभिव्यक्ति का उपयोग किया। (३) मैंने अपने उत्तर को अपडेट किया जैसे कि बेहतर है उसी के अनुसार स्वीकार किया जाता है, लेकिन मैंने यह भी दिखाया कि कैसे बना और उपनाम उपयोग किए गए या इसके बिना उपयोग किया जा सकता है। (4) यह भी दिखाया गया है कि फ़ंक्शन को कैसे परिभाषित किया जाए, हालांकि यह आवश्यक नहीं है लेकिन $ 1 और $ 2 के रूप में दिलचस्प तरीके से काम नहीं करता है। Thx # G-Man
कॉन्स्टेंटिन ज़ागॉर्स्की

-1

आप इसे आसानी से कर सकते हैं, बस .bashrc इस तरह से एक ALIAS को परिभाषित करने के साथ :

alias grep='grep -v grep | grep'

सुनिश्चित नहीं हैं कि किसने नीचे मतदान किया या क्यों नहीं लेकिन इससे आप पीएस का पूरा उपयोग कर सकते हैं जो pgrep नहीं करता है।
ऑप्टीकाइक्लिक

इतना ही नहीं यह अनजाने में अन्य grep प्रक्रियाओं को शामिल नहीं करता है; यह grepअन्य मामलों में भी उपयोग को तोड़ता है । कोशिश करो echo I love grep | grep love
trosos

@trosos लगभग 11 साल मैं * निक्स-आईएनजी रहा हूं .. और कभी भी उस पैटर्न का इस्तेमाल नहीं किया है ... शायद अगले साल हालांकि - कौन सही जानता है।
a20

-1

-X (सटीक मिलान) विकल्प का उपयोग करके मेरे लिए काम किया। मैंने इसे -f (पूर्ण कमांड लाइन) के साथ जोड़ा था, इसलिए मैं अपनी प्रक्रिया के साथ ठीक मिलान कर सकता था:

pgrep -x -f "path_i_used_when_starting/cmd params_i_used"

जो कोई भी ड्राइव-डाउन कर रहा है वह खुद को समझाएगा? यह मेरे लिए इस मुद्दे को सुलझाने में वर्षों से असफल रहा है।
मूडबूम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.