2010-05-19 24 views

cevap

126

:

sed -e 's/$/string after each line/' -i filename 

Değilse, geçici bir dosya yapmak zorunda:

typeset TMP_FILE=$(mktemp) 

touch "${TMP_FILE}" 
cp -p filename "${TMP_FILE}" 
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename 
+0

sayesinde işe yaradı! –

+0

Geçici dosyaya neden dokunmuyorsunuz? Ve ben “sed” komutunu “cp” nin başarısına koşullu kılardım ya da orijinali kaybolabilirdi. –

+0

Geçici adla hızlı bir şekilde ayırmak için dosyaya dokundum. Bu gerekli olmayabilir. Bence cp'nin başarısı üzerine sedd komutunu şart koşmakla ilgili haklısınız. Bu düzeltmeyi yapmak için kodu neden düzenlemiyoruz? Biraz umursamıyorum! Sevgiler, Tom –

-7

Sed biraz çirkin, yapabileceğin

+2

Daha fazla dosya içeren dosyalar için hata Kabuğun maksimum argüman limitinden daha fazla. Dene: kedi foo | okurken bir; echo $ {a} çubuk yapın; veya bunun gibi bir şey yapıldı; çoğu durumda için uygun bir yedek. – alex

+0

Ayrıca, boşluk bulunan satırlarda da başarısız olur. –

+1

Er, hayır, başarısız oluyor Dennis. Kabuk maksimum argüman sınırı? Crikey sen pandisiyorsun. – hendry

7

Eğer böyle bir şey varsa(laminat) yardımcı, örneğin, bunu yapabilir: I awk kullanmayı tercih

$ lam filename -s "string after each line" 
2

. Yalnızca bir sütun varsa, $0 kullanın, bunun yerine son sütunu kullanın.

bir yolu,

awk '{print $0, "string to append after each line"}' file > new_file 

veya bu,

awk '$0=$0"string to append after each line"' file > new_file 
+0

Ayrıca, satır numaralarını eklemek için (benim durumumda olduğu gibi), 'NR' değişkenini kullanabilirsiniz: awk' {print $ 0, NR} '' – andrybak

İlgili konular