Saya ingin membaca file baris demi baris dalam skrip shell Unix. Baris dapat berisi spasi di depan dan di belakang dan saya ingin membaca spasi tersebut juga di baris. Saya mencoba dengan "while read line &" tetapi perintah read menghilangkan karakter spasi dari baris :( Contoh jika baris dalam file adalah: -
abcd efghijk
abcdefg hijk
baris harus dibaca sebagai:-
1) " abcd efghijk &" 2) " abcdefg hijk &"
Apa yang saya coba adalah ini (yang tidak berhasil): -
while read line
do
echo $line
done < file.txt
Saya ingin baris termasuk karakter spasi dan tab di dalamnya. Tolong sarankan caranya.
Coba ini,
IFS=''
while read line
do
echo $line
done < file.txt
EDIT:
Dari man bash
IFS - The Internal Field Separator that is used for word
splitting after expansion and to split lines into words
with the read builtin command. The default value is
``<space><tab><newline>''
Anda ingin membaca baris raw untuk menghindari masalah dengan backslash dalam input (gunakan -r
):
while read -r line; do
printf "<%s>\n" "$line"
done < file.txt
Ini akan menjaga spasi di dalam baris, tetapi menghilangkan spasi di depan dan di belakang baris. Untuk menjaga hal itu juga, atur IFS kosong, seperti dalam
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt
Ini sekarang setara dengan cat < file.txt
selama file.txt
diakhiri dengan baris baru.
Perhatikan bahwa Anda harus mengutip dua kali "$line"
untuk menjaga agar pemisahan kata tidak memisahkan baris menjadi kata-kata terpisah--sehingga kehilangan beberapa urutan spasi.