awk / sed केवल अंडरस्कोर वर्ण तक प्रिंट करने के लिए


10

मैं केवल अंडरस्कोर वर्ण तक स्ट्रिंग को प्रिंट करने के लिए awk या sed का उपयोग कैसे कर सकता हूं?

इससे पहले:

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स्क्रिप्ट ही सिर्फ पहला क्षेत्र प्रिंट करता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.