Membaca file baris demi baris (dengan spasi) dalam skrip Unix Shell - Masalah

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.

Larutan

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
``''
Komentar (2)

Anda ingin membaca baris raw untuk menghindari masalah dengan backslash dalam input (gunakan -r):

while read -r line; do
   printf "\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.

Komentar (0)