linux मैं फ़ाइल में प्रत्येक पंक्ति की शुरुआत करने के लिए स्ट्रिंग कैसे बना सकता हूं?




bash sed (6)

एक एक लाइन awk कमांड भी चाल करना चाहिए:

awk '{print "prefix" $0}' file

मेरे पास निम्न बाश कोड है, जो एक पाठ फ़ाइल के माध्यम से छोरता है, रेखा से रेखा। Im प्रत्येक पंक्ति में काम 'उपसर्ग' का उपसर्ग करने की कोशिश कर रहा है, लेकिन इसके बजाय मुझे यह त्रुटि मिल रही है:

[email protected]:~/Desktop$ ./appendToFile.sh stusers.txt kp
stusers.txt
kp
./appendToFile.sh: line 11: /bin/sed: Argument list too long
115000[email protected].com,passw0rd

यह बाश स्क्रिप्ट है ..

#!/bin/bash

file=$1
string=$2

echo "$file"
echo "$string"

for line in `cat $file`
do
    sed -e 's/^/prefix/' $line
    echo "$line"
done < $file

मुझसे यहां क्या गलत हो रहा है?

अद्यतन: फ़ाइल पर सिर प्रदर्शन टर्मिनल की एक पंक्ति पर सभी लाइनों को छोड़ देता है, शायद संबंधित है?

[email protected]:~/Desktop$ head stusers.txt
[email protected]:~/Desktop$ ouse.com,passw0rd

Sed उपयोग करें बस शब्द prefix बदल दें।

sed -e 's/^/prefix/' file.ext

यदि आप किसी अन्य फ़ाइल में आउटपुट को सहेजना चाहते हैं

sed -e 's/^/prefix/' file.ext > file_new.ext

आपको sed की जरूरत नहीं है, बस इको कमांड में स्ट्रिंग्स को कंसल्टेट करें

while IFS= read -r line; do
    echo "prefix$line"
done < filename

फ़ाइल में प्रत्येक शब्द पर आपका लूप पुनरावृत्त करता है:

for line in `cat file`; ...

आपकी मूल त्रुटि के संबंध में:

./appendToFile.sh: पंक्ति 11: / bin / sed: तर्क सूची बहुत लंबी है

समस्या कोड की इस पंक्ति के साथ है:

sed -e 's/^/prefix/' $line

इस संदर्भ में $ पंक्ति का नाम है जो कि एसएएल के खिलाफ चल रहा है। अपना कोड ठीक करने के लिए आपको इस लाइन को इस तरह ठीक करना चाहिए:

echo $line | sed -e 's/^/prefex/'

(यह भी ध्यान दें कि आपके मूल कोड में < $file अंत नहीं होना चाहिए।)

विलियम पर्सल ने अपने दोनों सुझावों में इस मुद्दे को सही तरीके से संबोधित किया

हालांकि, मेरा मानना ​​है कि आपने सही तरीके से पहचाना है कि आपकी मूल पाठ फ़ाइल में एक समस्या है। dos2unix इस समस्या को ठीक नहीं करेगा, क्योंकि यह सिर्फ कैरिज रिटर्न विंडोज़ लाइनों के अंत पर चिपक जाती है। (हालांकि, अगर आप Windows में एक लिनक्स फाइल पढ़ने का प्रयास कर रहे हैं, तो आपको कोई रिटर्न नहीं मिलेगा।)

मान लें कि यह आपकी पाठ फ़ाइल में लाइन वर्णों के अंत के साथ कोई समस्या नहीं है, विलियम पर्सेल, एंडी लेस्टर, या नलरेवल्यूशन के उत्तर काम करेंगे।

while read... पर एक बदलाव while read... सुझाव:

while read -r line; do echo "PREFIX " $line; done < $file

यह शेल से सीधे चलाया जा सकता है (एक बैच / स्क्रिप्ट फ़ाइल की आवश्यकता नहीं):

while read -r line; do echo "kp" $line; done < stusers.txt


लूप के बजाय, यह while read... उपयोग करने के लिए अधिक उपयुक्त है while read... :

while read -r line; do
do
    echo "$line" | sed -e 's/^/prefix/'
done < $file

लेकिन आप सरल के साथ बेहतर होगा:

sed -e 's/^/prefix/' $file

पूरे लूप को एक एकल कमांड द्वारा बदल दिया जा सकता है जो पूरी फाइल पर काम करता है:

sed -e 's/^/prefix/' $file




sed