हम 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
)