यहाँ उदाहरण फ़ाइल है:
somestuff...
all: thing otherthing
some other stuff
मैं जो करना चाहता हूं वह all:
इस तरह से शुरू होने वाली पंक्ति में जोड़ना है :
somestuff...
all: thing otherthing anotherthing
some other stuff
जवाबों:
यह मेरे लिए काम करता है
sed '/^all:/ s/$/ anotherthing/' file
पहला भाग खोजने के लिए एक पैटर्न है और दूसरा भाग $
एक पंक्ति के अंत के लिए एक साधारण सेड का प्रतिस्थापन है ।
यदि आप प्रक्रिया के दौरान फ़ाइल को बदलना चाहते हैं, तो -i
विकल्प का उपयोग करें
sed -i '/^all:/ s/$/ anotherthing/' file
या आप इसे किसी अन्य फ़ाइल पर रीडायरेक्ट कर सकते हैं
sed '/^all:/ s/$/ anotherthing/' file > output
$0
यदि यह स्थिति से मेल खाता है तो आप टेक्स्ट को awk में जोड़ सकते हैं:
awk '/^all:/ {$0=$0" anotherthing"} 1' file
/patt/ {...}
यदि रेखा द्वारा दिए गए पैटर्न से मेल खाती है patt
, तो उसके भीतर वर्णित क्रियाओं को करें {}
।/^all:/ {$0=$0" anotherthing"}
यदि रेखा शुरू होती है (द्वारा प्रतिनिधित्व की जाती है ^
) all:
, तो anotherthing
पंक्ति में संलग्न करें।1
सही स्थिति के रूप में, की डिफ़ॉल्ट क्रिया को ट्रिगर करता है awk
: वर्तमान लाइन ( print $0
) प्रिंट करें । यह हमेशा होगा, इसलिए यह या तो मूल लाइन या संशोधित एक को प्रिंट करेगा।आपके दिए गए इनपुट के लिए यह लौटाता है:
somestuff...
all: thing otherthing anotherthing
some other stuff
ध्यान दें कि आप पाठ को एक चर में जोड़ सकते हैं:
$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff
awk: can't set $0
/usr/xpg4/bin/awk
"अच्छा" जाग का उपयोग कर सकते हैं ।
बैश में:
while read -r line ; do
[[ $line == all:* ]] && line+=" anotherthing"
echo "$line"
done < filename
यहां सेड का उपयोग करके एक और सरल समाधान है।
$ sed -i 's/all.*/& anotherthing/g' filename.txt
स्पष्टीकरण:
all। * का अर्थ है सभी लाइनें 'सभी' के साथ शुरू हुईं।
और मैच का प्रतिनिधित्व करें (यानी पूरी लाइन जो 'सभी' से शुरू होती है)
फिर sed ने पूर्व को बाद में बदल दिया और 'अन्य' शब्द को जोड़ा
Awk के साथ समाधान:
awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file
बस: यदि पंक्ति पंक्ति के साथ शुरू होती है तो all
"दूसरी बात", अन्यथा पंक्ति को प्रिंट करें।
awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
condition {actions}
जोड़े से बना है । यदि condition
छोड़ दिया जाता है, तो हर रिकॉर्ड के लिए कार्य किए जाते हैं। यदि {actions}
छोड़ दिया जाता है, और स्थिति सच का मूल्यांकन करती है (जो संख्या के लिए मामला है 1
) तो डिफ़ॉल्ट कार्रवाई वर्तमान रिकॉर्ड को प्रिंट करना है।