大部分功能強(qiáng)大的文本編輯器都提供重新格式化段落的命令;供用戶(hù)切分段落,使文本行數(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 查詢(xún)包括關(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"