हम sedया तो awkसमस्या का पूरी तरह से समाधान करने के लिए या तो उपयोग कर सकते हैं ।
के साथ sed:
$ sed 's/^.\./0&/' file.txt
जब &प्रतिस्थापन कमांड ( s) के प्रतिस्थापन भाग में होता है , तो इसे इनपुट लाइन के भाग तक विस्तारित किया जाएगा जो कमांड के पैटर्न भाग से मेल खाता है।
नियमित अभिव्यक्ति का ^.\.अर्थ है " एक शाब्दिक बिंदु ( ) के बाद शुरू होने वाली (सभी ^) एक मनमाना चरित्र ( .) के साथ शुरू होने वाली रेखाओं से मेल खाना\. "।
यदि रेखा है 1.02.2017 23:40:00, तो पैटर्न मेल खाएगा, और लाइन की शुरुआत में 1.प्रतिस्थापित किया जाएगा 01.।
के साथ awk:
awkप्रश्न में आंशिक कोड पर बिल्डिंग ...
जैसा कि कहा गया है, इनपुट की प्रत्येक पंक्ति के दूसरे वर्ण को प्रिंट करें:
$ awk '{ print substr($0, 2, 1) }' file.txt
हम इस तथ्य का उपयोग कर सकते हैं कि substr($0, 2, 1)दूसरा चरित्र लौटाता है और शर्त के रूप में उपयोग करता है:
$ awk 'substr($0, 2, 1) == "." { ... }' file.txt
जो { ... }कोड में जाता है वह प्रीपेंड करता है $0, जो कि वर्तमान लाइन की सामग्री है, एक शून्य के साथ यदि पूर्ववर्ती स्थिति सत्य है:
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 }' file.txt
फिर हमें केवल यह सुनिश्चित करने की आवश्यकता है कि सभी लाइनें मुद्रित हैं:
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 } { print }' file.txt
स्थिति substr($0, 2, 1) == "."को निश्चित रूप से एक नियमित अभिव्यक्ति में बदला जा सकता है (हम ठीक उसी अभिव्यक्ति का उपयोग करते हैं जैसा हमने sedसमाधान में किया था ):
$ awk '/^.\./ { $0 = "0" $0 } { print }' file.txt
कुछ लोग जो सोचते हैं कि "कम हमेशा बेहतर होता है" वह लिखते हैं
$ awk '/^.\./ { $0 = "0" $0 } 1' file.txt
(और शायद भी सबसे रिक्त स्थान निकालें: awk '/^.\./{$0="0"$0}1' file.txt)