কীভাবে PS কমান্ড থেকে কী মান জোড় বের করা যায়


10

আমি psআদেশের মতো অ্যাপ্লিকেশন নামটি বের করার চেষ্টা করছি :

ps -af -u sas |grep "java"| grep -v "grep"

এবং এটি নিম্নলিখিত উত্পাদন করে:

sas 24431     1  0 Oct10 ?        00:51:08 /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs

আমি চেষ্টা করার চেষ্টা করেছি egrepতবে মনে হচ্ছে এটি কাজ করছে না:

ps -af -u sas|grep "java"| grep -v "grep"| egrep -o "-Dapp.name"

আমি কীভাবে কেবল -Dapp.name"মাই অ্যাপ" মান পাব?


যদি grepপ্যাটার্নটি শুরু হয় -, আপনাকে -eবিকল্পের পরে এটি রাখা দরকার । অন্যথায়, এটি বিকল্প হিসাবে বিবেচিত হবে। তবে এটি কেবল শব্দের সাথে মিলবে -Dapp.name, তার পরে অংশটি নয়।
বার্মার

পর্যায়ক্রমে:grep -o -- -Dapp.name
strugee

আপনি grep [j]avaকমান্ড এড়াতে ব্যবহার করতে পারেন grep -v "grep"(
ব্যাশের

উত্তর:



8

আপনি যে ত্রুটি বার্তাটি পাচ্ছেন তা আপনি প্রদর্শন করছেন না সম্ভবত এটি সম্ভবত

গ্রেপ: অজানা ডিভাইস পদ্ধতি

এটি কারণ, অন্যান্য বা কমপক্ষে অন্যান্য অন্যান্য কমান্ড লাইন প্রোগ্রামগুলির মতো, grepধরে নেওয়া হয় যে কোনও একটি যা শুরু হয় -তা একটি বিকল্প এবং এটি যেমন পার্স করার চেষ্টা করে। এই ক্ষেত্রে, কীভাবে কোনও ডিভাইস ফাইলের সাথে ডিল করতে হয় তা -Dনির্দেশ দেওয়ার জন্য ব্যবহৃত হয় grep( man grepবিশদে বিশদে দেখুন)। এটিকে ঘুরে দেখার এক উপায় হ'ল ব্যবহার করা --যা জানায় grepযে নীচের যে কোনও কিছুই বিকল্প পতাকা নয়।

জিএনইউর পিসিআরই সক্ষমতার সাথে এটি মিশ্রন করে grepআপনি করতে পারেন:

ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'

নিয়মিত এক্সপ্রেশনটি এর জন্য অনুসন্ধান করে -এবং এটি ( \K) ত্যাগ করে , তারপরে স্ট্রিংটি Dapp.name=যথাসম্ভব অনেকগুলি ফাঁকা অক্ষর অনুসরণ করে। আউটপুটটি হ'ল:

Dapp.name=myApp

আপনি যদি myAppঅংশটি কোনও ভেরিয়েবলে সংরক্ষণ করতে চান তবে আমি এটির জন্য একাই অনুসন্ধান করব:

ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'

এটি একটি ভেরিয়েবলকে নির্ধারণ করতে:

$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp

যাইহোক, আপনি কখনও এই ধরণের জিনিস grepআউটপুট করা উচিত নয় ps, যে কি pgrepজন্য:

app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"


3

যে কোনও সময় আপনি ব্যবহার করেন ps … | grep …এবং ফলাফলগুলি থেকে গ্রেপ বাদ দেওয়ার প্রয়োজন হয়, আপনি এটি ভুল করছেন।

এর আউটপুট পার্স করার জিরোথ নিয়মটি psআরও নির্ভরযোগ্য সরঞ্জাম যেমন ব্যবহারযোগ্য হিসাবে ব্যবহার করা pgrep। আপনার যদি পিগ্রিপ pgrep -f javaথাকে তবে কমান্ডটি চালিত সমস্ত প্রক্রিয়া তালিকাভুক্ত করুন java। বিকল্পটি -lপ্রতিটি প্রক্রিয়ার জন্য কমান্ড লাইন যুক্ত করে।

যুক্তিটি বের করতে -Dapp.name, আপনি সেড ব্যবহার করতে পারেন। পুরো লাইনটি মিলান, একটি গ্রুপের আকর্ষণীয় অংশটি স্টাফ করার ব্যবস্থা করুন এবং সেই গোষ্ঠীটি মুদ্রণ করুন।

pgrep -lf java | sed -n 's/^.*-Dapp\.name=\([^ ]*\).*$/\1/p'

এর আউটপুট পার্সিংয়ের প্রথম নিয়ম psহ'ল -oআপনার প্রয়োজনীয় ক্ষেত্রগুলি নির্বাচন করতে বিকল্পটি ব্যবহার করা । এখানে, আপনি কেবল কমান্ড যুক্তিগুলিতে আগ্রহী তাই কেবল এটি মুদ্রণ করুন।

ps -e -o args= | sed -n 's/^.*-Dapp\.name=\([^ ]*\).*$/\1/p'

3

অন্যান্য উত্তরের চেয়ে জটিল, তবে এটি getoptআপনার জন্য পার্সিং পরিচালনা করতে ব্যবহার করে। তবুও অন্য বিকল্প।

getopt -aql 'Dapp.name:' $(\
    ps -af -u sas | grep java | grep -v grep | tr -s ' ' | cut -d' ' -f8-\
) | cut -d"'" -f2
  1. আপনার আদেশ: ps -af -u sas | grep java | grep -v grep
  2. tr -s ' ' প্রস্তুতির জন্য একক স্পেসে একাধিক স্পেস "সঙ্কুচিত" করে cut
  3. cut -d' ' -f8- স্পেস দিয়ে রেখাটি বিভক্ত করে 8 টি সমেতের পরে সমস্ত ক্ষেত্রকে দখল করে, ফলাফল /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs
  4. getopts -aql 'Dapp.name:' $(...)কমান্ড বিকল্পগুলি বিশ্লেষণ করে এবং কেবলমাত্র দীর্ঘ নামটির সাথে মেলে যা কার সাথে মেলে Dapp.name(মান দ্বারা চিহ্নিত :), ফলাফল--Dapp.name 'myApp' --
  5. cut -d"'" -f2 একক উদ্ধৃতিতে জিনিসটি আঁকড়ে ধরে
  6. ফলাফলটি হ'ল: myApp

0

আমি পছন্দ মত pgrepপরিবর্তে ব্যবহার করতে হবে ps:

$ pgrep -fa java | grep -op "(<=-Dapp.name=)\w+"

এটি মেলে এমন সমস্ত প্রক্রিয়া ফিরিয়ে দেবে javaএবং তারপরে কেবল যেগুলি রয়েছে সেগুলি দেখিয়ে তা ফিল্টার করবে -Dapp.name=। শেষ বিট, \w+প্রোগ্রামের নামটি দেখাবে, ধরে নিবে এটিতে কোনও স্থান নেই।

উল্লেখ্য:-P স্যুইচ করার grepenlists ব্যবহার জিনিষ নির্দিষ্ট করার ক্ষমতা PCRE - পার্ল সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশনgrepএটির সমর্থনের সমস্ত সংস্করণ নয় তবে বেশিরভাগ ক্ষেত্রে লিনাক্সের আরও আধুনিক সংস্করণ অন্তর্ভুক্ত রয়েছে।

আপনি যদি পুরো কী / মান আউটপুট চান তবে এর মতো জিনিসগুলি পরিবর্তন করুন:

$ pgrep -fa java | grep -oP -- "-Dapp.name=\w+"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.