কেবল আন্ডারস্কোর অক্ষর পর্যন্ত মুদ্রণ করতে awk / sed করুন


10

আমি কেবল প্রথম আন্ডারস্কোর অক্ষর পর্যন্ত কোনও স্ট্রিং মুদ্রণের জন্য কীভাবে জাঁজালি বা সেড ব্যবহার করতে পারি?

আগে:

host100_044 2
host101_045 2
host102_046 2

পরে:

host100
host101
host102

উত্তর:


20

এটি দিয়ে করা যেতে পারে cut:

cut -d _ -f 1

যেমন

$ echo host100_044 2 | cut -d _ -f 1
host100

এছাড়াও এটি দিয়ে awkসম্পন্ন করা যেতে পারে awk -F_ '{print $1}'(সম্ভবত এটি করার একটি পরিষ্কার উপায় আছে)


@ রেনান আমি কীভাবে এই কাট ফাংশনটি সংশোধন করব যদি আমি কাটটি সম্পাদন করা ছাড়াও আউটপুটটিতে সমস্ত ইনপুট তথ্য ধারণ করতে চাই?
বায়োম্যান

2

সেডের জন্য আরেকটি বিকল্প:

echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'

আপনার যদি কোনও ফাইলে থাকে তবে আপনি এটি নীচে কল করতে পারেন;

cat fileName | sed 's/^\(.*\)_.*$/\1/'

1
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}'  | cut -d ' ' -f2-

আউটপুট:

host100 host101 host102

নতুন লাইনের সাথে:

echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'

আউটপুট:

host100
host101
host102

1

ব্যবহার sed:

echo host100_044 2 | sed 's;_.*;;'


sedস্থান সম্পাদনা বিকল্পে ব্যবহার করে ,

sed -i.old 's;_.*;;' infile

তিনি awkইতিমধ্যে একই লিখছিলেন, যদিও সমাধান ইতিমধ্যে পোস্ট করা হয়েছে (এবং cutসম্ভবত এই ক্ষেত্রে সেরা), যেহেতু তিনি সম্পর্কে জিজ্ঞাসা করেছিলেন sed, তবে আপনি আমাকে কয়েক সেকেন্ডের সাথে মারধর করেছেন :-)। আপনি এমনকি স্ট্রিপ করতে পারেন $, যেহেতু এটি .*ডিফল্টরূপে লাইনের শেষের সাথে মিলবে ।
ড্যানিয়েল অ্যান্ডারসন

@ ড্যানিয়েল অ্যান্ডারসন: হ্যাঁ
যুবরাজ জন ওয়েসল

1
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100

-F'_'নির্দেশ করে awkক্ষেত্র বিভেদক রূপে আন্ডারস্কোর ব্যবহার করতে। awkস্ক্রিপ্ট নিজেই শুধুমাত্র প্রথম ক্ষেত্র ছাপে।


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