最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)用來分割空格、制表、換行等,所以上面文本行里多余的空格和換行都被自動縮進了。

如果想要輸出 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)文章

  • shell參數(shù)換行與shell輸出換行的方法實例

    shell參數(shù)換行與shell輸出換行的方法實例

    這篇文章主要給大家介紹了關(guān)于shell參數(shù)換行與shell輸出換行的方法實例,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-02-02
  • linux刪除大量文件的6種方法

    linux刪除大量文件的6種方法

    這篇文章主要介紹了linux刪除大量文件的6種方法,需要的朋友可以參考下
    2014-02-02
  • 如何解決 shell 腳本重復(fù)執(zhí)行的問題

    如何解決 shell 腳本重復(fù)執(zhí)行的問題

    假如執(zhí)行備份腳本消耗的時間遠大于設(shè)置的備份間隔的話,系統(tǒng)會出現(xiàn)多個同時在執(zhí)行腳本的Bash實例,會占用大量的系統(tǒng)資源,進而影響正常業(yè)務(wù)程序的運行,那如何解決上述shell腳本重復(fù)執(zhí)行的問題呢,本文將要介紹的 flock 命令可以解決這個問題
    2021-05-05
  • linux shell自定義函數(shù)(定義、返回值、變量作用域)介紹

    linux shell自定義函數(shù)(定義、返回值、變量作用域)介紹

    linux shell 可以用戶定義函數(shù),然后在shell腳本中可以隨便調(diào)用。下面說說它的定義方法,以及調(diào)用需要注意那些事項
    2013-02-02
  • 用expect實現(xiàn)的自動登錄到多臺服務(wù)器的shell腳本

    用expect實現(xiàn)的自動登錄到多臺服務(wù)器的shell腳本

    自動登錄到多臺服務(wù)器的shell腳本,用expect來實現(xiàn)的一段代碼,需要的朋友可以參考下
    2013-02-02
  • Python執(zhí)行Linux系統(tǒng)命令的4種方法

    Python執(zhí)行Linux系統(tǒng)命令的4種方法

    這篇文章主要介紹了Python執(zhí)行Linux系統(tǒng)命令的4種方法,即在Python腳本中調(diào)用Shell命令,需要的朋友可以參考下
    2014-10-10
  • shell腳本自動刪除30天以前的文件(最新推薦)

    shell腳本自動刪除30天以前的文件(最新推薦)

    該文章介紹了如何使用Shell腳本自動刪除指定目錄下30天以前的文件,并通過crontab設(shè)置定時任務(wù),此外,還提供了如何使用Shell腳本刪除Elasticsearch索引的參考,感興趣的朋友一起看看吧
    2025-02-02
  • Shell PATH變量用法詳解

    Shell PATH變量用法詳解

    這篇文章主要介紹了Shell PATH變量用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Linux基礎(chǔ)命令日常積累

    Linux基礎(chǔ)命令日常積累

    Linux命令雖然用處很多,用過這么多次但是對其步驟、命令還是不記得,每次還是要到處找資料,下面小編把本次linux生產(chǎn)環(huán)境搭建分享在腳本之家平臺,供大家參考
    2015-10-10
  • Linux Vim 實用命令詳解

    Linux Vim 實用命令詳解

    這篇文章主要介紹了Linux Vim 實用命令,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09

最新評論

平江县| 双峰县| 上林县| 区。| 珠海市| 康保县| 通道| 吉林市| 资源县| 宜城市| 博爱县| 邹平县| 炉霍县| 简阳市| 玛曲县| 克拉玛依市| 琼海市| 普宁市| 桐城市| 峡江县| 齐齐哈尔市| 大方县| 昆明市| 弥勒县| 五指山市| 武陟县| 五大连池市| 六安市| 新昌县| 怀来县| 贵州省| 武汉市| 余姚市| 泽州县| 开化县| 新建县| 昌宁县| 云南省| 杂多县| 井陉县| 哈密市|