जवाबों:
यह मानते हुए कि आपका वास्तव में क्या मतलब है कि आप अंतिम उपनिवेश तक सब कुछ हटाना चाहते हैं और john.doeबरकरार रखना चाहते हैं:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
पहली पंक्ति सिर्फ sedउदाहरण के लिए परीक्षण स्ट्रिंग को पाइप करती है।
दूसरा एक बुनियादी sedप्रतिस्थापन है । पहले और दूसरे के बीच का हिस्सा /खोज के लिए रेगेक्स है और दूसरे और तीसरे के बीच का हिस्सा है जो इसे बदलने के लिए है (इस मामले में कुछ भी नहीं है जैसा कि हम हटा रहे हैं)।
रेगेक्स के लिए, .किसी भी वर्ण से मेल खाता है, *यह किसी भी समय (शून्य सहित) को दोहराता है और :एक बृहदान्त्र से मेल खाता है। तो प्रभावी रूप से यह एक बृहदान्त्र द्वारा पीछा कुछ भी है। चूंकि .*एक बृहदान्त्र शामिल हो सकता है, मैच 'लालची' है और अंतिम उपनिवेश तक सब कुछ शामिल है।
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
मैं सभी घटनाओं की जगह ले रहा हूं : एक टैब के साथ और फिर awkस्ट्रिंग john.doe निकालने के लिए।
यदि आपके पास कोई फ़ाइल नहीं है, तो आप यह कोशिश कर सकते हैं।
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
ग्रीम की टिप्पणियों के अनुसार हम नीचे awkके NFचर का उपयोग करके अकेले अंतिम कॉलम को प्रिंट करने के लिए उपयोग कर सकते हैं awk।
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
अनावश्यक से छुटकारा पाने के लिए ग्रीम की टिप्पणियों को शामिल करना sed
आदेश को नीचे के रूप में संशोधित किया जा सकता है।
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk। मूल रूप से, मैं उन आदेशों का परीक्षण करने का प्रयास करता हूं जो मुझे मूल रूप से मेरे उत्तर में मिले और उपयोगकर्ता की आवश्यकता के अनुसार उन्हें संशोधित करने का प्रयास करें। :)
-Fको awkनिर्दिष्ट करने का विकल्प । यदि आप awkएक कोलन का उपयोग करने के लिए कहते हैं, तो टैब के साथ कॉलनों को बदलने की कोई आवश्यकता नहीं है। इसके अलावा, आप पिछले क्षेत्र आप उपयोग कर सकते हैं प्राप्त करना चाहते हैं, तो $NFबजाय $4, इस फिर अगर वहाँ नहीं है हमेशा 3 कोलन काम करेगा।
एक अन्य विधि का उपयोग कर awk:
awk -F: '{ print $NF }'
प्रयास करें
संपादित करें: हटाए गए एंकर
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
और हटाने के लिए
echo 'abc:fjk' |sed 's/.*://g'
^लंगर या तो सवाल के मामले में या अपने उदाहरण मामले में कोई फर्क नहीं पड़ता। /.*पहले से शुरू होने वाले किसी भी पते का तात्पर्य है ^।
awk, तो बस क्यों नहींawk -F:?