藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教:如何用sed刪除最後的幾行

例如:我有以下一個文件a1
         
606510062300097405       510107036
606510062300056184       510107036
606510062300053088       510107036
606510062300053932       510107036
606519013300302636       510183010
606584011300108134       510681011
606584011300081544       510681011
606621103300281954       510921001
606658005300069225       511129003
606739006300402621       511324013
         
10       10

它的文件開頭和結尾都有有空行和我不需要的行
我使用
         [code]
sed -e '/^$/d' -e '/select/d' a1>a2
sed '$d' a2>a3
sed '$d' a3>a4
sed '1d' a4>a5
[/code]
能夠把文件編輯為a5的效果
606510062300097405       510107036
606510062300056184       510107036
606510062300053088       510107036
606510062300053932       510107036
606519013300302636       510183010
606584011300108134       510681011
606584011300081544       510681011
606621103300281954       510921001
606658005300069225       511129003
606739006300402621       511324013
但是,我希望把這個語句精簡一點,請高手指點一下。謝謝。

請教:如何用sed刪除最後的幾行

$ grep -v '^ *$' test
606510062300097405       510107036
606510062300056184       510107036
606510062300053088       510107036
606510062300053932       510107036
606519013300302636       510183010
606584011300108134       510681011
606584011300081544       510681011
606621103300281954       510921001
606658005300069225       511129003
606739006300402621       511324013
補充:^和*之間有個空格

請教:如何用sed刪除最後的幾行

grep '^606'

請教:如何用sed刪除最後的幾行

[code]
>cat a1
        
606510062300097405       510107036
606510062300056184       510107036
606510062300053088       510107036
606510062300053932       510107036
606519013300302636       510183010
606584011300108134       510681011
606584011300081544       510681011
606621103300281954       510921001
606658005300069225       511129003
606739006300402621       511324013
        
10       10


>grep -v '^ *$' a1
606510062300097405       510107036
606510062300056184       510107036
606510062300053088       510107036
606510062300053932       510107036
606519013300302636       510183010
606584011300108134       510681011
606584011300081544       510681011
606621103300281954       510921001
606658005300069225       511129003
606739006300402621       511324013
10       10
>
[/code]
最後一行還是在啊
--------------------------------
grep '^606'
是可以的,但是假如我的文件開頭的不完全是606,還有303等等怎麼辦

請教:如何用sed刪除最後的幾行

grep '^606\|^303'  

:mrgreen:

請教:如何用sed刪除最後的幾行

-->
to waker:
老鄉,能解釋一下grep '^606\|^303'  嗎

請教:如何用sed刪除最後的幾行

看正則,以606或303開頭的行

請教:如何用sed刪除最後的幾行

[code]
sed -i '/^$/d'  a1|sed -i '$d'
[/code]

請教:如何用sed刪除最後的幾行

sed -i '/^$/d'  a1|sed -i '$d'
sed: ERROR: Illegal option -- i
sed不能-i  啊

請教:如何用sed刪除最後的幾行

-->
sed版本問題 :mrgreen:  建議使用GNU的軟件 :)

請教:如何用sed刪除最後的幾行

sed -n '/^606/p' a1

-->

請教:如何用sed刪除最後的幾行

問題是,第一列的數字中,不只只是606開頭,其實還有很多很多的開頭啊。。。,這個怎麼定的下來那

請教:如何用sed刪除最後的幾行

那你看看以下方法可以嗎:

awk '{if(length($1)==18) print}' a1

請教:如何用sed刪除最後的幾行

awk: Syntax error
at line 1 of program << {if(length($1)==1 pr ... >>
context is
        {if(length($1)==1 >>>  print <<< }
        1 extra (
awk: illegal statement
at line 1 of program << {if(length($1)==1 pr ... >>
錯誤如上

請教:如何用sed刪除最後的幾行

awk 'length($1)>2' file

請教:如何用sed刪除最後的幾行

問題已經解決,謝謝樓上的兄弟
可以給我解釋一下
awk 'length($1)>2' 是什麼意思呢

請教:如何用sed刪除最後的幾行

length是awk的一個內建函數,用於得到相應的域的長度!這裡,的意思是如果第一域的字符長度大於2個字符,則打印這條記錄!
關於awk的用法,請參閱置頂的shell基礎十二篇\之awk :)

請教:如何用sed刪除最後的幾行

正解!!謝謝樓上的兄弟。這樣的話的確方便很多



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com