Shell如何遍歷包含空格的文本詳解
shell遍歷文件
有時候要對某個文件夾下面的所有文件做同樣的處理,比如對每個文件統計行數,這時用遍歷文件的方式就很簡單瞭。
$ for i in `ls`;do wc -l $i;done
55552 f123.txt
55819 f124.txt
56118 f125.txt
56404 f126.txt
56633 f127.txt
56842 f128.txt
這裡使用瞭for…do…done循環,註意循環語句寫在一行上面時,要用 ; 分隔開來。
ls要用反引號擴起來。
Shell遍歷空格文本
處理包含空格或特殊字符的文件是每個使用Linux的人都應必須掌握的。本文我們將討論如何在帶有空格的文件上使用for循環。
測試文本如下:
This line has spaces
these
do
not
現在,我們使用for循環來迭代這個文本。當我們執行for循環時,shell會看到第一行的空格,並假設每一行都是不同的迭代。
[root@test ~]# for i in $(cat test);do echo $i;done This line has spaces these do not
IFS定義瞭在分隔單詞時用作分隔的字符或字符集。
維基百科:對於Unix操作系統的許多命令行解釋器(“shell”),內部字段分隔符(簡稱IFS)是指一個變量,該變量定義用於將模式拆分為某些操作的標記的字符。
默認情況下,IFS(字段分隔符)的值為<space><tab><newline>。因此,當shell看到第一行中的空格時,它將該行劃分為四個標記(四個單詞)。
修改IFS的值來滿足我們的需求
IFS是一個環境變量。在更改環境變量之前,最好的做法是保存它們的內容。這樣就可以輕松地將它們設置為默認值。
首先,我們先將IFS變量的值保存到OLDIFS中。
OLDIFS=$IFS
我們可以手動設置IFS成任何我們想要的值。在這種情況下,我們需要將字段分隔符作為換行符。我們可以像任何變量一樣設置IFS。
IFS=<our value>
要將IFS設置為換行符,我們可以使用命令替換從echo命令獲取換行符輸出。
IFS=`echo -e "\n"`
echo -e “\n”的輸出是一個換行符。用於反引號封裝,將shell命令的輸出作為變量IFS。
現在,當我們執行相同的for循環時,shell將通過換行符來分隔文本。
[root@test ~]# for i in $(cat test); do echo $i; done This line has spaces these do not
翻譯自Looping Through a File that Contains Spaces – Bash for Loop
總結
到此這篇關於Shell如何遍歷包含空格文本的文章就介紹到這瞭,更多相關Shell遍歷空格文本內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found