鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)二十一天---重新格式化段落
shell 學(xué)習(xí)四十五天---xargs
shell學(xué)習(xí)第三天
shell 學(xué)習(xí)十五天---join 連接字段
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)四十三天---臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)第六天---小結(jié)
shell 學(xué)習(xí)三十三天---關(guān)于重定向
shell 學(xué)習(xí)二十九天---循環(huán)
shell 學(xué)習(xí)二十四天---提取開(kāi)頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第十天---sed 查找與替換
shell 學(xué)習(xí)第十一天---sed 正則的精確控制
shell 學(xué)習(xí)三十天---break,continue,shift,getopts
shell 學(xué)習(xí)---小結(jié)
shell 學(xué)習(xí)三十一天---函數(shù)問(wèn)題
shell 學(xué)習(xí)第四天---華麗的 printf 輸出
shell 學(xué)習(xí)三十五天---波浪號(hào)展開(kāi)與通配符
shell 學(xué)習(xí)十九天---文本塊排序
shell 學(xué)習(xí)十二天---行與字符串
shell 學(xué)習(xí)二十一天---重新格式化段落
shell 學(xué)習(xí)十八天---文本排序
shell 學(xué)習(xí)十三天---sed 案例分析
shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令
shell 學(xué)習(xí)十七天---awk 命令
shell 學(xué)習(xí)三十六天---命令替換
shell 學(xué)習(xí)十六天---join 練習(xí)
shell 學(xué)習(xí)三十二天---read 讀取一行
shell 學(xué)習(xí)二十二天---計(jì)算行數(shù),字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)小總結(jié)---本章小結(jié)
shell 學(xué)習(xí)第八天---擴(kuò)展正則表達(dá)式(ERE)
shell 學(xué)習(xí)四十二天---使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)二十八天---case 語(yǔ)句
shell 學(xué)習(xí)三十九天---內(nèi)建命令
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)三十四天---printf 詳解
shell 學(xué)習(xí)二十六天---變量與算數(shù)
shell 學(xué)習(xí)三十八天---執(zhí)行順序和 eval
shell 學(xué)習(xí)四十四天---尋找文件
shell 學(xué)習(xí)二十五天---神器的管道符
shell 學(xué)習(xí)十四天---使用 cut 選定字段
shell 學(xué)習(xí)第五天---基本的I/O重定向
shell 學(xué)習(xí)四十天---awk 的驚人表現(xiàn)
shell 學(xué)習(xí)二十天---sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)二十三天---打印
shell 學(xué)習(xí)第九天---分組
shell 學(xué)習(xí)四十八天---文件校驗(yàn)和匹配
shell 學(xué)習(xí)二十七天---退出狀態(tài)和 if 語(yǔ)句
shell 學(xué)習(xí)四十七天---文件比較 cmp,diff,patch
shell 學(xué)習(xí)第七天---基礎(chǔ)正則表達(dá)式(BRE)
shell 學(xué)習(xí)四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)三十七天---引用
shell 學(xué)習(xí)小結(jié)

shell 學(xué)習(xí)二十一天---重新格式化段落

重新格式化段落

大部分功能強(qiáng)大的文本編輯器都提供重新格式化段落的命令;供用戶切分段落,使文本行數(shù)不要超出我們看到的屏幕范圍.這樣我們就引入了 fmt 命令,雖然一些 fmt 的實(shí)現(xiàn)有較多的選項(xiàng)可用,但其實(shí)只用:-s 僅切割較長(zhǎng)的行,但不會(huì)將短行結(jié)合成較長(zhǎng)的行,而-w n 則設(shè)置輸出行寬度為 n 個(gè)字符(默認(rèn)通常是 75 個(gè)).
fmt 命令的語(yǔ)法:
fmt [option] [file-list]
fmt 通過(guò)將所有非空白的長(zhǎng)度設(shè)置為幾乎相同,來(lái)進(jìn)行簡(jiǎn)單的文本格式化.

-s 截?cái)嚅L(zhǎng)行,但不合并
-t 除每個(gè)段落的第 1 行外都縮進(jìn)
-u 改變格式化,使字之間出現(xiàn)一個(gè)空格,句子之間出現(xiàn)兩個(gè)空格
-w n 將輸出的行寬改為 n 個(gè)字符。不帶該選項(xiàng)時(shí),fmt 輸出的行寬度為 75 個(gè)字符

例如,我有一個(gè)文件 demo,內(nèi)容為:
A long time ago, there was a huge apple tree. A little boy loved to come and play around it every day. He climbed to the tree top, ate the apples, took a nap under the shadow… He loved the tree and the tree loved to play with him.

使用命令 fmt -s demo,輸出為:

A long time ago, there was a huge apple tree. A little boy loved to come and play around it every day. He climbed to the tree top, ate the apples, took a nap under the shadow… He loved the tree and the tree loved to play with him.
該命令的含義是節(jié)段2長(zhǎng)行.

使用fmt -t demo命令的意思是說(shuō)排除首行的縮進(jìn),結(jié)果為:
A long time ago, there was a huge apple tree. A little boy loved to come and play around it every day. He climbed to the tree top, ate the apples, took a nap under the shadow… He loved the tree and the tree loved to play with him.

使用fmt -u demo命令的意思是說(shuō)格式化單詞和句子的間隔.輸出為:
A long time ago, there was a huge apple tree. A little boy loved to come and play around it every day. He climbed to the tree top, ate the apples, took a nap under the shadow… He loved the tree and the tree loved to play with him.
顯然 A little boy 前面的多個(gè)空格變成了兩個(gè).

使用命令fmt -w 40 demo意思是說(shuō)指定行的寬度,這里的行寬為 40 個(gè)字符.所以輸出為:
A long time ago, there was a huge apple tree. A little boy loved to come and play around it every day. He climbed to the tree top, ate the apples, took a nap under the shadow… He loved the tree and the tree loved to play with him.

僅作切割的選項(xiàng): -s , 在你想將長(zhǎng)的行繞回,短的行保持不動(dòng)時(shí)很好用,這么做也能使結(jié)果與原始版本間的差異達(dá)到最小,例如:

fmt -s -w 10 << EOF  
one two three four five  
six  
seven  
eight  

輸出為:
one two
three
four five
six
seven
eight

fmt 的小案例:
下面以拼音字典為例:
字典文件:/usr/dict/words 或者/usr/share/dict/words。
sed -n -e 9991,10010p /usr/share/dict/words | fmt
sed -n -e 9991,10010p /usr/share/dict/words | fmt -w 30
觀察上面兩行命令的輸出.
復(fù)習(xí)一下 sed 命令:
sed 是一個(gè)很好的文件處理工具,本身是一個(gè)管道命令,主要是以行為單位進(jìn)行處理,可以將數(shù)據(jù)行進(jìn)行替換、刪除、新增、選取等特定工作.假設(shè)我們有一個(gè)文件 demo
sed ‘1d’ demo 刪除第一行
sed -n ‘1p’ 顯示第一行
sed -n ‘/root/p’ demo 查詢包括關(guān)鍵字 root 所在所有行
sed ‘1a hahaha’ demo 第一行后增加字符串 hahaha
sed ‘1,3a hahaha’ demo 第一行到第三行后增加字符串 hahaha

sed ‘1c hihihi’ demo 第一行代替為 hihihi
sed ‘1,2c hihihi’ demo 第一行和第二行替換為 hihihi
替換一行中的某部分
格式:sed 's/要替換的字符串/新的字符串/g' (要替換的字符串可以用正則表達(dá)式),案例:
sed ‘s/root/hahaha/g’ 替換 root 為 hahaha
sed ‘s/root//g’ 刪除 root
sed -i '$a bye' ab #在文件ab中最后一行直接輸入"bye"