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


    

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


請教如何通過管道獲取命令輸出的文字塊中的個別行?

一個命令 COMMAND,執行後顯示出好幾行數據,原先我是將他們統統導出到一個文本中。但是[b]其實我需要的只是其中以start和stop開始的那麼幾行[/b],我該如何[b]通過管道過濾那些無用信息[/b]呢?
例如原命令是:
snort -Cdv -n 9 port 2000 > new.txt

snort -Cdv -n 9 port 2000 | sed -n '/start/'p > new.txt
只能得到包含start的行,不能滿足要求

謝謝指點。

請教如何通過管道獲取命令輸出的文字塊中的個別行?

snort -Cdv -n 9 port 2000|grep -E 'start|stop'

請教如何通過管道獲取命令輸出的文字塊中的個別行?

多謝,《LINUX與UNIX Shell編程指南》中也是這麼說的,我也試了,但顯示為空。用vi查看未經過濾的new.txt,內容如下:
200.190.160.2402000 200.190.160.2501155           ^@
200.190.160.2501155 200.190.160.2402000          ^@
200.190.160.2501155 200.190.160.2402000          050405 ready^@
200.190.160.2402000 200.190.160.2501155          ^@
200.190.160.2402000 200.190.160.2501155          1122693366 05040 start ^@
200.190.160.2501155 200.190.160.2402000          ^@
200.190.160.2501155 200.190.160.2402000          ^@
200.190.160.2402000 200.190.160.2501155          ^@
200.190.160.2501156 200.190.160.2402000           ^@
200.190.160.2402000 200.190.160.2501156           ^@
200.190.160.2501156 200.190.160.2402000          ^@
200.190.160.2501156 200.190.160.2402000          1122693366 stop^@
200.190.160.2402000 200.190.160.2501156          ^@
200.190.160.2402000 200.190.160.2501156           ok ^@
200.190.160.2501156 200.190.160.2402000          ^@
200.190.160.2501156 200.190.160.2402000          ^@
200.190.160.2402000 200.190.160.2501156          ^@


我覺得就是^@在作怪,我的想法是用管道先刪除所有的^@,再用grep提取出只包含start和stop的行
光用樓上的方法還是不行。請各位幫忙,謝謝

請教如何通過管道獲取命令輸出的文字塊中的個別行?

對了,用cat new.txt 是看不到^@的。如何是好
加了 sed 's/^@//' 也不行?

請教如何通過管道獲取命令輸出的文字塊中的個別行?

-->

那就是你的輸出中沒有這個關鍵字

請教如何通過管道獲取命令輸出的文字塊中的個別行?

輸出的文本我給在上面了,start和stop都是有的!後面都緊跟著個^@

請教如何通過管道獲取命令輸出的文字塊中的個別行?

在vi中
%s/^@//g

^@用ctrl+V+@輸入

請教如何通過管道獲取命令輸出的文字塊中的個別行?

那是控制字符在作祟,先用col -b過濾這些控制字符

請教如何通過管道獲取命令輸出的文字塊中的個別行?

# snort -Cdv -n 18 port 2000 | col -b | grep -E 'start|stop' > new.txt

解決問題,謝謝樓上各位了!!!

請教如何通過管道獲取命令輸出的文字塊中的個別行?

不好意思,結論說的太早了
原本 snort -Cdv port 2000 > new.txt
是一有信號就往new.txt送
例如上面new.txt中start和stop就是分兩次寫入的
我用它來觸發特定程序的啟動和終止.
但是加上grep後好像是snort全部完成後再一次性過濾,再傳送的???
中間沒有時間讓我程序運行了!!!

如何才能實時過濾snort傳出的數據,而不是等snort發完後再運行.

請教如何通過管道獲取命令輸出的文字塊中的個別行?

sed -n '/start\|stop/p' >new.txt



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