相信很多朋友在日常的開發(fā)過程中經(jīng)常要處理一些文本甜熔,其中很重要的一部分就是要刪除文本中的空行仑撞,例如下面的文本( 我現(xiàn)在的開發(fā)環(huán)境是HP-UX 只搁,在Linux環(huán)境同樣適用 )
AAAAA
BBBBB
CCCCC
DDDDD
想要得到的結(jié)果是:
AAAAA
BBBBB
CCCCC
DDDDD
如果想通過命令刪除文本中的空行音比,可以通過下面的命令實(shí)現(xiàn)(本文介紹三種方法):
1.使用grep命令過濾掉文本中為空行的行
grep -vE "^[[:blank:]]*$" filename
解釋上面的命令:
首先grep
是一個強(qiáng)大的文本搜索工具,其中選項(xiàng) -v
代表反向匹配( 代表輸出的是不匹配的行 )氢惋,選項(xiàng) -E
代表使用擴(kuò)展正則表達(dá)式洞翩。匹配模式部分中 [:blank:]
是POSIX
字符集,匹配的是空格和制表符明肮,^
和 $
分別代表匹配文本的開頭和結(jié)尾菱农,[ ]
代表匹配中括號中的任意一個字符缭付,*
代表其前面的字符出現(xiàn)0次或多次柿估,所以將這條命令連起來看就是不輸出那些由空格或制表符開頭并且空格和制表符出現(xiàn)次數(shù)不確定的行,需要注意的是如果文本中的空行不是由空白或者制表符造成的陷猫,而只是在編寫文本時由于輸入換行符造成的秫舌,那這條命令同樣適用。grep
雖然無法直接匹配換行符绣檬,但是可以通過grep -E "^$"
實(shí)現(xiàn)匹配換行符足陨,所以現(xiàn)在回過頭來看上面的那條命令是不是發(fā)現(xiàn)了它可以過濾掉文本中不管是由什么原因造成的空行。
2.使用awk命令過濾掉文本中為空行的行
awk '!/^[[:blank:]]*$/{print $0}' filename
awk
命令實(shí)現(xiàn)的思路和想法與上述grep
命令完全一樣娇未,只是語法不同而已
3.使用sed命令刪除文本中的空白行
sed '/^[[:blank:]]*$/d' filename
sed
命令實(shí)現(xiàn)原理與上面兩個命令大同小異墨缘,值得一提的就是sed
表達(dá)式中的命令d
是代表刪除,刪除文件中的空白行
- 結(jié)尾
本文中提到了三種去除文本中空行的方法零抬,但是具體問題還應(yīng)具體分析镊讼,如果可以確定文件造成空行的原因就是因?yàn)檩斎霌Q行符導(dǎo)致的那我使用tr -s "\n" < filename
照樣可以實(shí)現(xiàn),而且好多文本工具都支持一些比較復(fù)雜的文本操作平夜,就拿UE來說去除文件中的空行就是Ctrl+R
然后勾選正則表達(dá)式蝶棋,然后在“查找”的框中輸入%[ ^t]++^p
在“被替換為”的框中什么都不輸入( 如果該框中有其他字符應(yīng)刪除掉所有的字符 ),這樣也可以去掉文件中的空白行忽妒。所以雖然是做同樣的一件事玩裙,但是可以有好多種方法實(shí)現(xiàn),就看你所處的開發(fā)環(huán)境和你更傾向于哪種實(shí)現(xiàn)方式了段直。