|
藍森林 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刪除最後的幾行
正解!!謝謝樓上的兄弟。這樣的話的確方便很多 |
| |