【參考文章】:【shell指令碼】逐行處理文字檔案
這種方式處理時,如果在迴圈內操作全域性變數,超過迴圈作用域後,對全域性變數的操作就會失效。
比如把每一行文字新增到乙個全域性陣列,在迴圈內陣列新增的元素是正常的,在迴圈外陣列的元素會恢復到迴圈之前的狀態;
cat data.dat | while read line
do echo "file:$"
done
這種方式處理時,如果在迴圈過程中執行某些命令,如 fab 命令,執行完命令後會直接跳出迴圈
while read line
do echo "file:$"
done < data.dat
這種方式處理時,var 取值由ifs(內部域分隔符)決定,預設為 space,tab,newline來拆解讀入的變數。
#!/bin/bash
ifs_old=$ifs #將原ifs值儲存,以便用完後恢復
ifs=$』\n』 #更改ifs值為$』\n』 ,注意,以回車做為分隔符,ifs必須為:$』\n』
do something
ifs=$ifs_old #恢復原ifs值
這種方式遍歷文字不會出現上述問題,推薦使用
for line in $(cat data.dat)
do echo "file:$"
done
for line in `cat data.dat`
do echo "file:$"
done
處理文字時的邏輯比較複雜時一般用上述方式,如果只是簡單的擷取列印,則可以使用 awk 命令
傳送門:linux awk
shell讀取檔案每一行的方式
使用read命令讀取一行資料 while read myline doecho line myline done datafile.txt 使用read命令讀取一行資料 cat datafile.txt while read myline do echo line myline done 讀取一行資...
shell讀取檔案每一行的方式
1 使用read命令讀取一行資料 1 2 3 4 whileread myline do echo line myline done datafile.txt 2 使用read命令讀取一行資料 1 2 3 4 cat datafile.txt whileread myline do echo lin...
shell讀取檔案的每一行寫法
shell讀取檔案的每一行寫法一 bin bash while read line doecho line done filename 待讀取的檔案 寫法二 bin bash cat filename 待讀取的檔案 while read line doecho line done 寫法三 for l...