sed - कई फाइलों में परिवर्तन लागू करें


11

मेरे पास सैकड़ों फाइलें हैं जिनमें " </foo:bar>" हैं

cc
bb
aa
</foo:bar>
dd
xx
vv

मैं उन सभी को एक बार में बदलना चाहता हूं

cc
bb
aa
</foo:bar>

जब मैं इसे सटीक फ़ाइल नाम देता हूँ तो sed अच्छी तरह से काम करता है

sed -i "/ </ foo: बार> / q" 99999.txt

लेकिन जब मैं उन सभी को बदलने की कोशिश करता हूं तो मुझे कोई परिणाम नहीं मिलता है।

 sed -i "/<\/foo:bar>/q" *.txt

जवाबों:


19

प्रयत्न:

sed -s -n -i '0,/<\/foo:bar>/p' *.txt

-s प्रत्येक फ़ाइल को अलग मानने के लिए sed को बताता है।

क्योंकि हम sedतब तक नहीं छोड़ना चाहते हैं जब तक सभी फाइलें पूरी नहीं हो जाती हैं, हम शुरुआत से प्रिंट तक बदल देते हैं <\/foo:bar>और बाकी लाइनों को नहीं प्रिंट करते हैं। -nजब तक हम स्पष्ट रूप से इसे नहीं पूछेंगे तब तक sed नहीं बताता है। आदेश 0,/<\/foo:bar>/pफ़ाइल की शुरुआत से पहली पंक्ति है कि मैचों के रेंज में किसी भी लाइन मुद्रित करने के लिए sed बताता है <\/foo:bar>

-s/ OSX sed विकल्प बीएसडी के लिए उपलब्ध नहीं है।


@ fd0 धन्यवाद। -sबीएसडी / ओएसएक्स सेड की कमी को ध्यान में रखते हुए उत्तर अपडेट किया गया ।
15:10 बजे जॉन 1024

के लिए जीएनयू sed , -iविकल्प का अर्थ है -s... वहाँ एक है sedकार्यान्वयन जहां इस समाधान के बिना काम नहीं करेगा -sविकल्प?
संदीप

7

जब </foo:bar>पाया फ़ाइलों को पढ़ने से रोकने के लिए :

GNU के साथ awk:

gawk -i inplace '{print}; $0 == "</foo:bar>" {nextfile}' ./*.txt

के साथ perl:

perl -ni -e 'print; close ARGV if $_ eq "</foo:bar>\n"' ./*.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.