जवाबों:
इसके साथ किया जा सकता है cut
:
cut -d _ -f 1
जैसे
$ echo host100_044 2 | cut -d _ -f 1
host100
इसके साथ भी किया awk
जा सकता है awk -F_ '{print $1}'
(शायद ऐसा करने का एक साफ तरीका है)
सेड के लिए एक और विकल्प:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
यदि आपके पास फ़ाइल में ये हैं, तो आप इसे इस प्रकार कह सकते हैं;
cat fileName | sed 's/^\(.*\)_.*$/\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
का उपयोग कर sed
:
echo host100_044 2 | sed 's;_.*;;'
sed
जगह संपादित विकल्प
का उपयोग करना ,
sed -i.old 's;_.*;;' infile
awk
समाधान पहले से ही पोस्ट किया गया हो (और cut
शायद इस मामले में सबसे अच्छा है), क्योंकि उसने पूछा था sed
, लेकिन आपने मुझे सेकंड के साथ हराया :-)। आप इसे पट्टी भी कर सकते हैं $
, क्योंकि यह .*
डिफ़ॉल्ट रूप से पंक्ति के अंत तक मेल खाएगा ।
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
-F'_'
निर्देश देता awk
क्षेत्र डिलीमीटर के रूप में अंडरस्कोर उपयोग करने के लिए। awk
स्क्रिप्ट ही सिर्फ पहला क्षेत्र प्रिंट करता है।
इससे पहले आउटपुट प्रिंट होगा _
:
sed 's/_.*//' -filename