大部分功能強(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"