मैं बैश का उपयोग करके फ़ाइल में प्रत्येक पंक्ति के बाद एक स्ट्रिंग कैसे जोड़ सकता हूं? क्या यह sed कमांड का उपयोग करके किया जा सकता है, यदि हां तो कैसे?
मैं बैश का उपयोग करके फ़ाइल में प्रत्येक पंक्ति के बाद एक स्ट्रिंग कैसे जोड़ सकता हूं? क्या यह sed कमांड का उपयोग करके किया जा सकता है, यदि हां तो कैसे?
जवाबों:
यदि आपका पैरामीटर पैरामीटर के sedमाध्यम से संपादन की अनुमति देता है -i:
sed -e 's/$/string after each line/' -i filename
यदि नहीं, तो आपको एक अस्थायी फ़ाइल बनानी होगी:
typeset TMP_FILE=$( mktemp )
touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename
sed -e 's/^/string after each line/' -i filename $ का अर्थ है अंत-पंक्ति। ^ का मतलब है लाइन की शुरुआत।
sed 's/^/string after each line/'वह होगा जो मैं उम्मीद करूंगा (प्रत्येक पंक्ति के लिए प्रस्तुत sed 's/^/string after each line/'करता है ), लेकिन यह नहीं करता है (यह पूरी पंक्ति को मेरे एपेंड स्ट्रिंग के साथ बदल देता है)। क्या देता है? कोई विचार @TomDeGisi?
मैं उपयोग करना पसंद करता हूं awk। यदि केवल एक कॉलम है, तो उपयोग करें $0, अन्यथा इसे अंतिम कॉलम से बदलें।
एक रास्ता,
awk '{print $0, "string to append after each line"}' file > new_file
या यह,
awk '$0=$0"string to append after each line"' file > new_file
NRचर का उपयोग कर सकता है:awk '{print $0, NR}'
sed 's/ //g'ने मेरी आवश्यकता के लिए काम किया, लेकिन यह हर पंक्ति में स्थान को हटा देगा, अर्थात gएक पंक्ति में और हर जगह क्या विकल्प होगा ।
, की तरह {print $0"string to append after each line"}।
यदि आपके पास यह है, तो लैम (टुकड़े टुकड़े) उपयोगिता इसे कर सकती है, उदाहरण के लिए:
$ lam filename -s "string after each line"
शुद्ध POSIX खोल और sponge:
suffix=foobar
while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file |
sponge filexargsऔर printf:
suffix=foobar
xargs -L 1 printf "%s${suffix}\n" < file | sponge fileका उपयोग कर join:
suffix=foobar
join file file -e "${suffix}" -o 1.1,2.99999 | sponge fileशैल उपकरण का उपयोग कर paste, yes, head
और wc:
suffix=foobar
paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
ध्यान दें कि इससे पहले pasteएक टैब चार सम्मिलित करता है $suffix।
बेशक spongeएक अस्थायी फ़ाइल के साथ बदला जा सकता है, बाद mvमें मूल फ़ाइलनाम के ऊपर, कुछ अन्य उत्तरों के साथ ...
sedजब तक संसाधन बहुत सीमित नहीं हैं, इनमें से कोई भी बेहतर नहीं है ।
sedइस तरह के एक सरल काम के लिए आवश्यक नहीं है।
मैं पसंद करता हूं echo। शुद्ध बैश का उपयोग करना:
cat file | while read line; do echo ${line}$string; done
सैड थोड़ा बदसूरत है, आप इसे इतने अच्छे से कर सकते हैं:
hendry@i7 tmp$ cat foo
bar
candy
car
hendry@i7 tmp$ for i in `cat foo`; do echo ${i}bar; done
barbar
candybar
carbar
cat foo; गूंज $ {i} बार; फ़ॉबर बारबार बज़बार किया लेकिन कुछ परीक्षणों के बाद, मैं अपने तर्क के बारे में गलत हो सकता हूं, लेकिन डेनिस सही है
echo "foo bar" | (for i in `cat`; do echo ${i}bar; done)2 रेखाएँ प्रिंट करती हैं, जबकि इनपुट 1 पंक्ति है foo bar(और catफ़ाइल के बजाय स्टडिन से पढ़ना इसके लिए कोई अंतर नहीं है)।
touchअस्थायी फ़ाइल क्यों करते हैं ? और मैं मूलsedकी सफलता पर कमांड सशर्त बना सकता हूंcpया खो सकता है।