আপনি যে ত্রুটি বার্তাটি পাচ্ছেন তা আপনি প্রদর্শন করছেন না সম্ভবত এটি সম্ভবত
গ্রেপ: অজানা ডিভাইস পদ্ধতি
এটি কারণ, অন্যান্য বা কমপক্ষে অন্যান্য অন্যান্য কমান্ড লাইন প্রোগ্রামগুলির মতো, 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]+')"
grep
প্যাটার্নটি শুরু হয়-
, আপনাকে-e
বিকল্পের পরে এটি রাখা দরকার । অন্যথায়, এটি বিকল্প হিসাবে বিবেচিত হবে। তবে এটি কেবল শব্দের সাথে মিলবে-Dapp.name
, তার পরে অংশটি নয়।