欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本逐行讀取文本文件(不改變文本格式)

 更新時間:2015年04月25日 11:03:45   作者:vpsee  
這篇文章主要介紹了Shell腳本逐行讀取文本文件,本文著重探討不改變文本格式的方法讀取出文件內(nèi)容,需要的朋友可以參考下

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

復(fù)制代碼 代碼如下:

$ 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 讀取文件內(nèi)容的例子就是:
復(fù)制代碼 代碼如下:

$ 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


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

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

復(fù)制代碼 代碼如下:

$ 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    


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

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

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

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

復(fù)制代碼 代碼如下:

#!/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

相關(guān)文章

  • Python創(chuàng)建、刪除桌面、啟動組快捷方式的例子分享

    Python創(chuàng)建、刪除桌面、啟動組快捷方式的例子分享

    這篇文章主要介紹了Python創(chuàng)建、刪除桌面、啟動組快捷方式的例子分享,需要的朋友可以參考下
    2014-04-04
  • awk 九九乘法表 shell實現(xiàn)代碼

    awk 九九乘法表 shell實現(xiàn)代碼

    這篇文章主要介紹了awk 九九乘法表 shell實現(xiàn)代碼,需要的朋友可以參考下
    2016-03-03
  • Linux查看系統(tǒng)時間的詳細(xì)方法總結(jié)

    Linux查看系統(tǒng)時間的詳細(xì)方法總結(jié)

    系統(tǒng)時間是計算機(jī)硬件和軟件運行的基礎(chǔ),在Linux系統(tǒng)中,查看系統(tǒng)時間是一項基本任務(wù),本文將從多個方面介紹Linux查看系統(tǒng)時間的詳細(xì)方法,需要的朋友可以參考下
    2023-09-09
  • Linux Shell腳本系列教程(一):Shell入門

    Linux Shell腳本系列教程(一):Shell入門

    這篇文章主要介紹了Linux Shell腳本系列教程(一):Shell入門,本文講解了Shell簡介、Shell基本操作、如何打開Shell終端、Shell腳本的概念、如何運行Shell腳本、Shell腳本的注釋等基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • Linux shell中如何獲取當(dāng)前目錄

    Linux shell中如何獲取當(dāng)前目錄

    這篇文章主要介紹了Linux shell中如何獲取當(dāng)前目錄問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Linux的打包壓縮與解壓縮---tar、xz、zip、unzip命令詳解

    Linux的打包壓縮與解壓縮---tar、xz、zip、unzip命令詳解

    Linux 下一堆各式各樣的壓縮文件名:.gz、.tar.gz、tgz、bz2、.Z、.tar 等眾多的壓縮文件名,本文重點介紹Linux的打包壓縮與解壓縮---tar、xz、zip、unzip命令,感興趣的朋友一起看看吧
    2024-02-02
  • Linux命令之free命令使用詳解

    Linux命令之free命令使用詳解

    在Linux系統(tǒng)中,free命令用于顯示系統(tǒng)內(nèi)存的使用情況,它提供了系統(tǒng)內(nèi)存總量、已使用內(nèi)存、空閑內(nèi)存以及其他與內(nèi)存相關(guān)的統(tǒng)計信息,本文將給大家詳細(xì)的介紹一下Linux free命令的使用方法,需要的朋友可以參考下
    2023-08-08
  • shell Bash的數(shù)組與關(guān)聯(lián)數(shù)組的實現(xiàn)

    shell Bash的數(shù)組與關(guān)聯(lián)數(shù)組的實現(xiàn)

    本文主要介紹了shell Bash的數(shù)組與關(guān)聯(lián)數(shù)組的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Shell實現(xiàn)判斷進(jìn)程是否存在并重新啟動腳本分享

    Shell實現(xiàn)判斷進(jìn)程是否存在并重新啟動腳本分享

    這篇文章主要介紹了Shell實現(xiàn)判斷進(jìn)程是否存在并重新啟動腳本分享,本文給出了兩個實現(xiàn)腳本,分簡潔版和詳細(xì)版,需要的朋友可以參考下
    2014-09-09
  • Shell實現(xiàn)猜數(shù)字游戲

    Shell實現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了Shell實現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論