কাট কমান্ডটি কেবলমাত্র সর্বশেষ ক্ষেত্রটি পড়ার কোনও উপায় আছে?


13

আমি একটি স্থান seperated স্ট্রিংটি কমান্ড, যা আমি নল মত করে আউটপুট আছে cutব্যবহার -fd ' 'শূণ্যস্থান উপর বিভক্ত করা হয়। আমি জানি আমি -f <n>ক্ষেত্রের নম্বর প্রদর্শন করতে ব্যবহার <n>করতে পারি, তবে আমি যদি স্ট্রিংয়ের দৈর্ঘ্য না জানি তবে এটি কি সর্বশেষ ক্ষেত্রটি প্রদর্শন করতে পারি?

বা আমার মতো আরও নমনীয় পাঠ্য সম্পাদনার সরঞ্জামটি ব্যবহার করা দরকার sedবা awk?


আমি মনে করি কাট কমান্ড সমর্থন করতে পারে না, তবে নিশ্চিত নয়, আপনার কি কাট-ডি '' -f- দিয়ে চেষ্টা করেছেন?
нιηসিস

3
এরকম আরো উপায়: stackoverflow.com/questions/22727107/...
edwinksl

@ ক্যাসিয়া -nএটিকে শুরু থেকে এন করে তোলে, এন থেকে n-শেষ পর্যন্ত, এবং সেখানে --complementবিকল্পটি রয়েছে যা নির্বাচনকে বিপরীত করে। তবে ক্ষেত্রের সংখ্যা গণনা এবং যতদূর আমি বলতে পারি তার উপরে কাজ করার কোনও উপায় নেই।
অ্যারোনিকাল

উত্তর:


13

কেউ cutএটা করতে পারে না। আপনি দুটি revকমান্ড ব্যবহার করতে পারেন , যেমন

echo 'foo bar baz' | rev | cut -d' ' -f1 | rev

তবে এটি সাধারণত ব্যবহার করা সহজ awk:

echo 'foo bar baz' | awk '{print $(NF)}'

7

আপনি এটি কেবল শেল ব্যবহার করে করতে পারেন, প্যারামিটার এক্সপেনশন ব্যবহার করে কোনও বাহ্যিক সরঞ্জামের প্রয়োজন নেই:

${var##* }

var##*প্যারামিটার (ভেরিয়েবল) থেকে শুরু থেকে শেষ স্থান পর্যন্ত সবকিছু বাতিল করে দেবে var

যদি ডিলিমিটারটি কোনও সাদা স্থান হতে পারে যেমন স্থান বা ট্যাব, অক্ষর শ্রেণি ব্যবহার করুন [:blank:]:

${var##*[[:blank:]]}

উদাহরণ:

$ var='foo bar spam egg'

$ echo "${var##* }"
egg


$ var=$'foo\tbar\tspam\tegg'

$ echo "$var"
foo    bar    spam    egg

$ echo "${var##*[[:blank:]]}"
egg

আমি সেভেরাস টাক্সের উত্তরের একটি মন্তব্যে প্যারামিটার সম্প্রসারণটি ব্যবহার করার কথা বলেছি, তবে ফাঁকা অক্ষর শ্রেণি দরকারী তথ্য, ধন্যবাদ।
অ্যারোনিকাল

4

আমি ব্যক্তিগতভাবে ফ্লোরিয়ান ডিয়েশ উত্তরটি পছন্দ করি। তবে এই উপায়ও আছে।

a=$(echo "your string here" | wc -w)
echo "your string here" | cut -d' ' -f$a

ব্যাখ্যা:

wc -wশব্দ সংখ্যা দেয়। এবং cutশেষ শব্দটি কেটে দেয়

সম্পাদনা করুন:

আমি এটি করার আরেকটি উপায় অনুভব করেছি:

echo "Any random string here" | tac -s' ' | head -1

সঠিক, তবে ডিলিম স্থান বা ট্যাব হলে এটি সত্য এবং যদি আপনার কাটা
ডিলিমটি

সুন্দর পার্শ্বীয় চিন্তাভাবনা, যদিও আমি সেট করে দিলে আমি খুব বেশি a="my string here"প্যারামিটার বিস্তৃতি ব্যবহার করতে পারি ${a##* }
অ্যারোনিকাল

1
হ্যাঁ, তবে ওপি জানিয়েছে যে তার একটি স্পেস পৃথক স্ট্রিং রয়েছে।
সেভেরাস টাকস

2

এখানে একটি ব্যবহার করা হয় grep

$ echo "Change is Good" | grep -o '[^ ]*$'
Good

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

  • -oমিলে যাওয়া লাইনের কেবল মেলে (খালি নয়) অংশগুলি মুদ্রণের সাথে গ্রেপ করুন।
  • রেজিপ্সেক্স [^ ]*$কোনও জায়গা না পাওয়া অবধি শেষের সাথে যে কোনও কিছুর সাথে মেলে।

পার্ল ব্যবহার করে গ্লেন জ্যাকম্যানের আর একটি লাইনার

$ echo "Change is Good" | perl -lane 'print $F[-1]'
Good
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.