shell中如何刪除文字比較長的行

2021-09-25 13:08:31 字數 806 閱讀 1680

有的時候需要對檔案執行刪除刪除操作,這個時候比較常用的會使用vi命令中的dd命令,比如先執行10g(跳轉到第10行),然後再執行20dd(刪除20行),但實際情況未必是這麼常規,比如說,要刪除檔案中,某行長度超過200個字元的行,如果文字比較小,還好,如果是幾萬行,幾十萬行的呢? 這個想用vi就不現實了。 我然想到的辦法就是:比如說,通過sed,awk,egrep命令來達到目的。 舉個簡單例子。

假如說如下文字檔案,要將其中長度為5字元以上的給刪除掉。

root@linux# cat data122

3334444

55555

666666

7777777

88888888

方法一: 使用awk命令的length()函式

root@linux# cat data | awk 『』122

3334444

方法二: 使用grep命令

root@linux# cat data | egrep -w 『^.』122

3334444

方法三: 使用sed命令

root@linux# cat data | sed -n 『/^./!w newfile』

root@linux# cat newfile122

3334444

備註:使用awk,grep命令的時候,可以將處理好的檔案重定向到另外乙個新檔案中

egrep -w引數,表示僅跟模式匹配的單詞

^. 表示以任意字元開頭的行,這個和-w命令匹配使用,這個很關鍵,否則找不到

!w !表示所有模式不匹配的,w是輸出,寫入到新檔案newfile檔案中

linux shell 刪除文字 較長行

目錄 方法一 使用awk命令的length 函式 方法二 使用grep命令 方法三 使用sed命令 備註 有的時候需要對檔案執行刪除刪除操作,這個時候比較常用的會使用vi命令中的dd命令,比如先執行10g 跳轉到第10行 然後再執行20dd 刪除20行 但實際情況未必是這麼常規,比如說,要刪除檔案中...

shell 刪除文字中的重複行

三種常見方法 第一,用sort uniq,注意,單純uniq是不行的。shell sort k2n file uniq a.out 這裡我做了個簡單的測試,當file中的重複行不再一起的時候,uniq將服務刪除所有的重複行。經過排序後,所有相同的行都在相鄰,因此unqi可以正常刪除重複行。第二,用s...

shell中if做比較

比較兩個字串是否相等的辦法是 if test x test x then 這裡的關鍵有幾點 1 使用單個等號 2 注意到等號兩邊各有乙個空格 這是unix shell的要求 3 注意到 test x最後的x,這是特意安排的,因為當 test為空的時候,上面的表示式就變成了x testx,顯然是不相等...