পাইপিং সহ 'সেড' কীভাবে ব্যবহার করবেন


34

আমি আউটপুট করা একটি স্ট্রিং প্রতিস্থাপন করতে চাই grep, আমার কাছে রয়েছে:

$ npm info webpack | grep version 

এটা আমার ফলাফল

$ version: '2.1.0-beta.12',

তবে আমি চাই:

$ 2.1.0-beta.12

সুতরাং আমি মনে করি আমি এটি অর্জন করতে পারি sedএবং অপ্রয়োজনীয় সাবস্ট্রিংগুলি ব্যবহার করে এবং প্রতিস্থাপন করতে পারি। তবে এখানে আমার পক্ষে শক্ত অংশটি রয়েছে:

$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command

কীভাবে আমার লক্ষ্য অর্জন করতে পারে?

উত্তর:


30

আপনি যদি সেড ব্যবহার করতে চলেছেন তবে গ্রেপ ব্যবহার করারও দরকার নেই। চেষ্টা করুন:

npm info webpack | sed -En "s/version: '(.*)',/\1/p"

উদাহরণ:

$ echo  "version: '2.1.0-beta.12'," | sed -En "s/version: '(.*)',/\1/p"
2.1.0-beta.12

বিকল্প: awk ব্যবহার করে

একইভাবে, আমরা যদি খালি ব্যবহার করি তবে গ্রেপ করারও দরকার নেই:

npm info webpack | awk -F"[ ',]+" '/version:/{print $2}'

উদাহরণ:

$ echo  "version: '2.1.0-beta.12'," | awk -F"[ ',]+" '/version:/{print $2}'
2.1.0-beta.12

কিভাবে এটা কাজ করে:

  • -F"[ ',]+"

    এটি ফাঁকা স্থান, একক উদ্ধৃতি, বা কমা বা ক্ষেত্র বিভাজক হিসাবে এর কোনও সংমিশ্রণ ব্যবহার করতে অজানা কে বলে।

  • /version:/{print $2}

    যদি কোনও লাইনে থাকে version:তবে দ্বিতীয় ক্ষেত্রটি মুদ্রণ করুন।


2
-Eবিকল্প স্পষ্টত ere সিনট্যাক্স ব্যবহার করতে অর্থ, কিন্তু আমার গনুহ sed 4.2.2 ম্যানুয়াল শুধুমাত্র উল্লেখ -r-Eকাজ করে, যদিও!
Law29

2
@ আইন 29 হ্যাঁ সমস্ত যুক্তিসঙ্গতভাবে আধুনিক GNU সেড, তবে এটির জন্য -Eএকটি অনথিভুক্ত প্রতিশব্দ -r। গুজবটি হ'ল পসিক্স স্থিতিশীল হয়েছে -E, যা বিএসডি / ওএসএক্স ইতিমধ্যে ব্যবহার করেছে এবং যদি এটি চূড়ান্ত মানটিতে যুক্ত হয় তবে আমরা সকলে স্থানান্তরিত হব -E
1024

6

sedবিকল্প কমান্ড ( s) একটি অনুসন্ধান প্যাটার্ন এবং একটি প্রতিস্থাপন স্ট্রিং প্রত্যাশা করে। আপনি এটি কেবল অনুসন্ধানের ধরণ দিয়ে সরবরাহ করেছেন। শেলের মধ্যে আপনার স্ট্রিংগুলি সঠিকভাবে উদ্ধৃত করা উচিত:

$ npm info webpack | grep 'version:' | sed 's/version: //'

এটি আপনাকে ফলাফল দেবে '2.1.0-beta.12',, যা আপনি চান তা পুরোপুরি নয়।

যেহেতু আউটপুটটি grepএত সহজ, আপনি লাইনটির দ্বিতীয় ক্ষেত্রটি পেতে (জটিল নিয়মিত প্রকাশের প্রয়োজন ছাড়াই) cutডিলিমিটারের সাহায্যে ব্যবহার করতে পারেন ':

$ npm info webpack | grep -F 'version:' | cut -d "'" -f 2

এটি আপনাকে দেবে 2.1.0-beta.12

আমি আরও যোগ করেছেন -Fকরতে grepযেহেতু স্ট্রিং আপনার জন্য অনুসন্ধান একটি হল ফিক্সড স্ট্রিং , না একটি রেগুলার এক্সপ্রেশন।


1

প্রথমত, আপনি ব্যবহার করার চেষ্টা করতে পারেন sed:

npm info webpack | grep version: | sed 's/version: //'

অথবা আপনি ব্যবহার করতে পারেন awk:

npm info webpack | grep version: | awk '{print $2}'

যা সম্ভবত সহজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.