टेक्स्ट फाइल में हर लाइन पर ## प्रीपेंड करें


30

मैं एक नियमित पाठ फ़ाइल में सभी पंक्तियों में हैश जोड़ना चाहता हूं। मैं टर्मिनल और जीयूआई के उपयोग के साथ ठीक हूं - मुझे इसे पूरा करने की आवश्यकता है।

जवाबों:


50

आप ऐसा करने के sedलिए उपयोग कर सकते हैं :

sed -i.bak 's/^/##/' file

यह लाइन की शुरुआत ( ^) के साथ बदल देता है ##

-i.bakस्विच के साथ , sedफ़ाइल को अंदर जगह देता है, लेकिन एक्सटेंशन के साथ एक बैकअप प्रतिलिपि बनाता है .bak


1
+1 यह पहली बार है जब मैंने इस बैकअप विधि का सामना किया। मैंने हमेशा एक इनलाइन को सीधे किया sed 's/^/##/' -i file। इस मामले में, यह पसंद किया जाएगा क्योंकि यह गलत नहीं हो सकता। अन्य मामलों में, इस कमांड diff -u file.bak fileको मतभेदों को देखने के लिए जोड़ा जा सकता है (यदि आवश्यक हो, तो इसके माध्यम से पाइप करें less)। यदि यह काम करने की पुष्टि करता है, तो बैकअप हटाया जा सकता है। अन्यथा इसे एक साधारण से बहाल किया जा सकता है mv file.bak file
लेकेनस्टेयन

1
सुरुचिपूर्ण। मैं कुछ के बारे में सोच रहा था sed 's/^\(.*\)$/##\1/', लेकिन यह बहुत अच्छा है।
व्यवस्था करें

अच्छा लगा .. मैं विम को ऐसा करने का सुझाव देने के बारे में सोच रहा था ...
सतीश

इसने मुझे एक ब्लॉक सूची फ़ाइल को बदलने में मदद की :) :) धन्यवाद 1+
नील '

8

यहाँ पर्ल का उपयोग करके इस समस्या का समाधान है

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
-pस्विच भी उपयोगी है: perl -pe 's/^/##/' infile > outfile। ( -i[extension]टारगेट फ़ाइल को इन-प्लेस करने के लिए स्विच भी है।) perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka Matilainen

6

जबकि हम इस पर हैं:

gawk -i inplace '{print "##"$0}' infile

यह GNU awk 4.1.0+ के लिए (तुलनात्मक रूप से नया) इनलेट संपादन प्लगइन का उपयोग करता है ।


4

यहाँ एक bashतरीका है:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( में bashखोल , चल read -rकोई दूसरा तर्क के साथ की तरह काम करता IFS= read -r REPLY।)

यह शैलीगत रूप से बीवी_35 के पर्ल समाधान से प्रेरित है , जिसे मैं मानता हूं कि यह बहुत बड़ी फ़ाइलों के लिए बहुत तेज चलता है, क्योंकि perlपाठ प्रसंस्करण की बात आती है तो शेल की तुलना में अधिक कुशल होने की उम्मीद की जा सकती है।


3

sed -iPOSIX- मानक नहीं है, इसलिए यदि आप एक शुद्धतावादी हैं जिसका आप उपयोग करना चाहेंगे ed:

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

यहां perlप्रस्तुत है अन्यत्र की तुलना में एक आसान तरीका:

perl -pi -e 'print "##"' YOURFILEHERE

यह (ab) इस तथ्य का उपयोग करता है कि perl -pदिए गए कमांड को निष्पादित करने के बाद लाइन को प्रिंट करता है -e


0

आप पूर्व मोड में विम का उपयोग कर सकते हैं:

ex -sc '%s/^/##/|x' file
  1. % सभी लाइनों का चयन करें

  2. s विकल्प

  3. x सहेजें और बंद करें


0

अजगर के मानचित्रण समारोह और पुनर्निर्देशन स्टड के साथ किया जा सकता है:

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

आउटपुट को नई फ़ाइल में सहेजें और मूल के बजाय इसका उपयोग करें

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