shell : 遍歷文本每一行


【參考文章】:【Shell腳本】逐行處理文本文件
【參考文章】:Shell中的IFS解惑

1. read

這種方式處理時,如果在循環內操作全局變量,超過循環作用域后,對全局變量的操作就會失效。
比如把每一行文本添加到一個全局數組,在循環內數組添加的元素是正常的,在循環外數組的元素會恢復到循環之前的狀態;

cat data.dat | while read line
do
    echo "File:${line}"
done

這種方式處理時,如果在循環過程中執行某些命令,如 fab 命令,執行完命令后會直接跳出循環

while read line
do
    echo "File:${line}"
done < data.dat

2. for var in file

2.1 IFS

這種方式處理時,var 取值由IFS(內部域分隔符)決定,默認為 space,tab,newline來拆解讀入的變量。

#!/bin/bash
IFS_old=$IFS      #將原IFS值保存,以便用完后恢復
IFS=$’\n’        #更改IFS值為$’\n’ ,注意,以回車做為分隔符,IFS必須為:$’\n’
    do  something
IFS=$IFS_old      #恢復原IFS值

2.2 for var in file

這種方式遍歷文本不會出現上述問題,推薦使用

for line in $(cat data.dat)
do
    echo "File:${line}"
done

for line in `cat data.dat`
do
    echo "File:${line}"
done

3. awk

處理文本時的邏輯比較復雜時一般用上述方式,如果只是簡單的截取打印,則可以使用 awk 命令
傳送門:Linux awk


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM