perintah awk satu baris juga bisa membantu:
awk '{print "prefix" $0}' file
Seluruh loop dapat diganti dengan satu perintah sed yang beroperasi pada seluruh file:
sed -e 's/^/prefix/' $file
Mengenai kesalahan awal Anda:
./appendToFile.sh:baris 11:/bin/sed:Daftar argumen terlalu panjang
Masalahnya ada pada baris kode ini:
sed -e 's/^/prefix/' $line
$line
dalam konteks ini adalah nama file itu sed sedang berlari melawan. Untuk memperbaiki kode Anda, Anda harus memperbaiki baris ini seperti:
echo $line | sed -e 's/^/prefix/'
(Perhatikan juga bahwa kode asli Anda tidak boleh memiliki < $file
di akhir.)
William Pursell membahas masalah ini dengan benar dalam kedua sarannya.
Namun, saya yakin Anda telah mengidentifikasi dengan benar bahwa ada masalah dengan file teks asli Anda. dos2unix
tidak akan memperbaiki masalah ini, karena hanya menghapus carriage return stick Windows di akhir baris. (Namun, jika Anda mencoba membaca file Linux di Windows, Anda akan mendapatkan baris raksasa tanpa hasil.)
Dengan asumsi bahwa ini bukan masalah dengan karakter baris akhir dalam file teks Anda, jawaban William Pursell, Andy Lester, atau nullrevolution akan berfungsi.
Variasi pada while read...
saran:
while read -r line; do echo "PREFIX " $line; done < $file
Ini dapat dijalankan langsung dari shell (tidak perlu file batch/skrip):
while read -r line; do echo "kp" $line; done < stusers.txt
Cara Perl untuk melakukannya adalah:
perl -p -e's/^/prefix' filename
atau
perl -p -e'$_ = "prefix $_"' filename
Dalam kedua kasus, itu dibaca dari filename
dan mencetak baris awalan ke STDOUT.
Jika Anda menambahkan -i
bendera, maka Perl akan memodifikasi file di tempat. Anda juga dapat menentukan beberapa nama file dan Perl secara ajaib akan melakukan semuanya.