किसी फ़ाइल में एक निश्चित स्ट्रिंग के बाद टेक्स्ट कैसे डालें?


69

अभी मैं echo "Hello World" >> file.txtएक फ़ाइल में कुछ पाठ संलग्न करने के लिए उपयोग कर रहा हूं, लेकिन मुझे एक निश्चित स्ट्रिंग के नीचे पाठ जोड़ने की आवश्यकता है चलो "[विकल्प]" कहते हैं, क्या यह संभव है sed?

ईजी:

इनपुट फ़ाइल

Some text
Random
[option]
Some stuff

आउटपुट फाइल

Some text
Random
[option]
*inserted text*
Some stuff

1
आपको अधिक विशिष्ट होना होगा और लोगों को सटीक आदेशों की सहायता के लिए कुछ नमूना पाठ देने होंगे।
क्लेमेंट

कृपया आप क्यू संपादित करें inputऔर outputलाइनों और दिखाने के लिए । क्योंकि आप क्यू अस्पष्ट हैं। आप भी कर सकते हैं echo "Hello World [option]" >> file.txt, लेकिन इसका कोई मतलब नहीं है।

मैंने संदर्भ के लिए और अधिक जानकारी प्रदान करने के लिए प्रश्न को संपादित किया लेकिन स्वीकृत उत्तर वही था जिसे मैं पूरा करने की कोशिश कर रहा था
जेवियर विलानुएवा

यदि आप बस एक विन्यास फाइल को संपादित करना चाहते हैं तो यह सबसे अच्छा समाधान है जो मैंने पाया: unix.stackexchange.com/a/78076/20661
rubo77

जवाबों:


104

मैच के बाद परिशिष्ट रेखा

  • sed '/\[option\]/a Hello World' input

मैच से पहले लाइन डालें

  • sed '/\[option\]/i Hello World' input

इसके अतिरिक्त, आप बैकअप ले सकते हैं और इनपुट फाइल को इन-प्लेस में -i.bkpएड करने के लिए एडिट कर सकते हैं


2
osx मैं मिलता हैsed: 1: "/pattern/a some text here": command a expects \ followed by text
the_prole


मैक OSX के लिए, मुझे विकल्प के \ <<NEWLINE>>बाद जोड़ना होगाa
टॉम हावर्ड

उपर्युक्त कोड हर एक मैच के लिए लाइन में जोड़ / डालेगा। यदि आप केवल पहले मैच के लिए लाइन 0,sed '0,/\[option\]/a Hello World' inputsed '0,/\[option\]/i Hello World' input
लगाना

33

हां, यह संभव है sed:

sed '/pattern/a some text here' filename

एक उदाहरण:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$

2
@javiervd मुझे यकीन नहीं है कि आपको पहले उत्तर से क्या मतलब है? यदि आप पहले उत्तर दिए गए समय से मतलब रखते हैं, तो आप गलत हैं। आपने टाइमस्टैम्प का ध्यानपूर्वक निरीक्षण नहीं किया!
देवनुल

क्या नवीनतम स्ट्रिंग के मिलान के बाद इसे जोड़ने का कोई तरीका है? उदाहरण के लिए foo bar option bar option baz :। तो पैटर्न बन गया foo bar option bar option addedstring baz ?
अरी

4

साथ awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

ध्यान रखें कि कुछ वर्णों को शाब्दिक रूप से शामिल नहीं किया जा सकता है, इसलिए एक से बचने के क्रम का उपयोग करना होगा (वे एक बैकस्लैश से शुरू होते हैं) उदाहरण के लिए एक शाब्दिक बैकस्लैश प्रिंट करना होगा \\

यह वास्तव में एक ही है, sedलेकिन इसके अलावा पाठ में प्रत्येक एम्बेड की गई नई पंक्ति को एक बैकस्लैश द्वारा पूर्ववर्ती होना चाहिए:

sed '/PATTERN/a\
add one line\
\\and one more' infile

एस्केप सीक्वेंस के बारे में अधिक जानकारी के लिए मैनुअल से सलाह लें।


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