|
藍森林 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 |
| |