佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Shell如何遍歷包含空格的文本詳解

Shell如何遍歷包含空格的文本詳解

熱門(mén)標(biāo)簽:呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 Linux服務(wù)器 AI電銷 服務(wù)外包 鐵路電話系統(tǒng) 地方門(mén)戶網(wǎng)站 百度競(jìng)價(jià)排名

shell遍歷文件

有時(shí)候要對(duì)某個(gè)文件夾下面的所有文件做同樣的處理,比如對(duì)每個(gè)文件統(tǒng)計(jì)行數(shù),這時(shí)用遍歷文件的方式就很簡(jiǎn)單了。

$ 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循環(huán),注意循環(huán)語(yǔ)句寫(xiě)在一行上面時(shí),要用 ; 分隔開(kāi)來(lái)。

ls要用反引號(hào)擴(kuò)起來(lái)。

Shell遍歷空格文本

處理包含空格或特殊字符的文件是每個(gè)使用Linux的人都應(yīng)必須掌握的。本文我們將討論如何在帶有空格的文件上使用for循環(huán)。

測(cè)試文本如下:

This line has spaces
these
do
not

現(xiàn)在,我們使用for循環(huán)來(lái)迭代這個(gè)文本。當(dāng)我們執(zhí)行for循環(huán)時(shí),shell會(huì)看到第一行的空格,并假設(shè)每一行都是不同的迭代。

[root@test ~]# for i in $(cat test);do echo $i;done
This
line
has
spaces
these
do
not

IFS定義了在分隔單詞時(shí)用作分隔的字符或字符集。

維基百科:對(duì)于Unix操作系統(tǒng)的許多命令行解釋器(“shell”),內(nèi)部字段分隔符(簡(jiǎn)稱IFS)是指一個(gè)變量,該變量定義用于將模式拆分為某些操作的標(biāo)記的字符。

默認(rèn)情況下,IFS(字段分隔符)的值為space>tab>newline>。因此,當(dāng)shell看到第一行中的空格時(shí),它將該行劃分為四個(gè)標(biāo)記(四個(gè)單詞)。

修改IFS的值來(lái)滿足我們的需求

IFS是一個(gè)環(huán)境變量。在更改環(huán)境變量之前,最好的做法是保存它們的內(nèi)容。這樣就可以輕松地將它們?cè)O(shè)置為默認(rèn)值。

首先,我們先將IFS變量的值保存到OLDIFS中。

OLDIFS=$IFS

我們可以手動(dòng)設(shè)置IFS成任何我們想要的值。在這種情況下,我們需要將字段分隔符作為換行符。我們可以像任何變量一樣設(shè)置IFS。

IFS=our value>

要將IFS設(shè)置為換行符,我們可以使用命令替換從echo命令獲取換行符輸出。

IFS=`echo -e "\n"`

echo -e "\n"的輸出是一個(gè)換行符。用于反引號(hào)封裝,將shell命令的輸出作為變量IFS。

現(xiàn)在,當(dāng)我們執(zhí)行相同的for循環(huán)時(shí),shell將通過(guò)換行符來(lái)分隔文本。

[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

總結(jié)

到此這篇關(guān)于Shell如何遍歷包含空格文本的文章就介紹到這了,更多相關(guān)Shell遍歷空格文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:黃山 衡水 銅川 湘潭 崇左 蘭州 仙桃 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell如何遍歷包含空格的文本詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    常熟市| 九龙城区| 吉首市| 泰兴市| 德安县| 延寿县| 大同市| 中江县| 乌审旗| 克拉玛依市| 阳高县| 武义县| 微博| 桂东县| 临城县| 盐源县| 卓资县| 庆云县| 确山县| 阳朔县| 永寿县| 右玉县| 太仓市| 金寨县| 许昌县| 五华县| 马尔康县| 武定县| 南华县| 个旧市| 靖西县| 茌平县| 福安市| 屯门区| 揭东县| 连云港市| 久治县| 通山县| 门头沟区| 新密市| 凌云县|