編寫不同的文本處理和文件操作腳本時,通常需要對文件中的行,單詞和字符進行迭代,盡管這個問題看 起來很簡單,但是實現起來卻常常出現問題,下面,就讓我們來看看怎樣實現上述功能。
為了實現上 述的功能,我們需要分三個步驟敘述
一.迭代文件中的每一行
我們可以通過用一個 while 循環 從標准輸入中讀取,因此,它在每一次迭代中都會讀取一行。
下面的方法可以將stdin 重定向到文件 :
首先我們看下文件中的內容是怎樣的:
NO Hello Mark Percent 1 Sarath 45 90 2 Alex 49 98 3 Anu 45 90
下面給出實現的腳本:
#!/bin/bash while read line do echo $line done < data.txt
運行下我們的腳本,結果如圖所示:
二.迭代一行中的每一個單詞
我們同樣可以用while循環得到每一行,之後利用 IFS 獲取一行的各個字段
下面給出實現的腳 本:
#!/bin/bash while read line do for word in $line do echo $word; done done < data.txt
運行下我們的腳本,結果如圖所示:
三.迭代一個單詞中的每一個字 符
我們利用一個 for 循環對變量 i 進行迭代,迭代范圍從0到字符串的長度。在每次迭代中,我們可 以用一個特殊的記法:
${string:start:position:No_of_characters}
意思是:從字符串中提 取一個字符
這被稱為是子串提取技術,${word:start:position:No_of_characters} 返回變量word所 包含的字符串中的一個子串
${#word} 返回變量的長度
下面給出實現的腳本:
#!/bin/bash while read line do for word in $line do for(( i=0;i<${#word};i++ )) do echo ${word:i:1}; done done done < data.txt
運行下我們的腳本,結果如圖所示:
說明:由於顯示的內容太長, 這裡的截圖顯示的只是輸出的一部分字符