91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現Shell腳本逐行讀取文本文件

發布時間:2021-09-28 11:35:19 來源:億速云 閱讀:140 作者:iii 欄目:開發技術

這篇文章主要介紹“如何實現Shell腳本逐行讀取文本文件”,在日常操作中,相信很多人在如何實現Shell腳本逐行讀取文本文件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何實現Shell腳本逐行讀取文本文件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

網上有很多 shell script 讀文本文件的例子,但是都沒有講出故事的全部,只說了一半。舉個例子,比如從一個 testfile 文件中讀取如下格式的文本行:

代碼如下:

$ vi testfile
ls      -a -l /bin |  sort
ls      -a -l /bin |  sort | wc
ls      -a -l |  grep sh | wc
ls      -a -l
ls      -a -l |       sort      |    wc


最常見的一個 line by line 讀取文件內容的例子就是:

代碼如下:

$ vi readfile
#!/bin/sh

testfile=$1
while read -r line
do
    echo $line
done < $testfile

$ chmod +x readfile
$ ./readfile testfile
ls -a -l /bin | sort
ls -a -l /bin | sort | wc
ls -a -l | grep sh | wc
ls -a -l
ls -a -l | sort | wc

這個例子的問題是讀取文本行后,文本格式發生了變化,和原來 testfile 文件的內容不完全一致,空格字符自動被刪除了一些。為什么會這樣呢?因為 IFS,如果在 shell script 里沒有明確指定 IFS 的話,IFS 會默認用來分割空格、制表、換行等,所以上面文本行里多余的空格和換行都被自動縮進了。

如果想要輸出 testfile 文件原有的格式,把每行(作為整體)原封不動的打印出來怎么辦?這時需要指定 IFS 變量,告訴 shell 以 "行" 為單位讀取。

代碼如下:

$ vi readfile
#!/bin/sh

IFS=""

testfile=$1
while read -r line
do
    echo $line
done < $testfile

$ ./readfile testfile
ls      -a -l /bin |  sort
ls      -a -l /bin |  sort | wc
ls      -a -l |  grep sh | wc
ls      -a -l
ls      -a -l |       sort      |    wc    

上面兩種方法的輸出不是差不多嗎,有什么關系呢,第一種還美觀一些?關系重大,VPSee 昨天寫了一個模擬 shell 的 C 程序,然后又寫了一個 shell script 來測試這個 C 程序,這個 script 需要從上面的 testfile 里讀取完整一行傳給 C 程序,如果按照上面的兩種方法會得到兩種不同的輸入格式,意義完全不同:

代碼如下:

$./mypipe ls -a -l | sort | wc
$./mypipe "ls -a -l | sort | wc "


顯然我要的是第2種輸入,把 "ls -a -l | sort | wc " 作為整體傳給我的 mypipe,來測試我的 mypipe 能不能正確識別出字符串里面的各種命令。

如果不用 IFS 的話,還有一種方法可以得到上面第二種方法的效果:

代碼如下:

#!/bin/sh

testfile=$1
x=`wc -l $testfile |awk '{print $1}'`

i=1
while [ $i -le $x ]
do
    echo "`head -$i  $testfile | tail -1`"
    i=`expr $i + 1`
done

到此,關于“如何實現Shell腳本逐行讀取文本文件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

百色市| 曲靖市| 中方县| 莫力| 彭水| 广汉市| 曲麻莱县| 富宁县| 凤冈县| 洛阳市| 岳西县| 青冈县| 丰原市| 罗源县| 阜康市| 福州市| 大埔县| 西乌| 台湾省| 漳平市| 焦作市| 晴隆县| 东兴市| 和硕县| 丹阳市| 随州市| 万宁市| 石泉县| 城固县| 墨玉县| 驻马店市| 平果县| 浦江县| 五大连池市| 华容县| 柳江县| 西盟| 芦溪县| 洱源县| 扎赉特旗| 桃园市|