Anda dapat melakukan while read
loop berikut , yang akan diumpankan oleh hasil dari grep
perintah menggunakan proses yang disebut substitusi:
while IFS= read -r result
do
#whatever with value $result
done < <(grep "xyz" abc.txt)
Dengan cara ini, Anda tidak harus menyimpan hasilnya dalam sebuah variabel, tetapi langsung "menyuntikkan" hasilnya ke loop.
Perhatikan penggunaan IFS=
dan read -r
sesuai dengan rekomendasi di BashFAQ / 001: Bagaimana saya bisa membaca file (aliran data, variabel) baris demi baris (dan / atau bidang-demi-bidang)? :
Opsi -r untuk membaca mencegah interpretasi backslash (biasanya digunakan sebagai pasangan garis miring backslash, untuk melanjutkan beberapa baris atau untuk menghindari pembatas). Tanpa opsi ini, garis miring terbalik yang tidak terhapus di input akan dibuang. Anda hampir selalu harus menggunakan opsi -r dengan membaca.
Dalam skenario di atas IFS = mencegah pemangkasan spasi putih depan dan akhir. Hapus jika Anda menginginkan efek ini.
Mengenai penggantian proses, dijelaskan di halaman peretas bash :
Substitusi proses adalah bentuk pengalihan di mana input atau output dari suatu proses (beberapa urutan perintah) muncul sebagai file sementara.
grep -o
untuk hal semacam ini. The-o
bendera akan memberikan kembali hanya teks yang cocok, dengan satu pertandingan per baris dari output. (Ini tidak lengkap, jadiecho aaa |grep 'a*'
hanya memberi Anda "aaa" dan menghilangkan tiga pertandingan parsial "", "a", dan "aa")