Re: [問題] regular expression 小問題

作者: s25g5d4 (function(){})()   2016-06-01 12:59:05
※ 引述《decken (HAHAHA~)》之銘言:
: 大家好,
: 有一份文件(https://goo.gl/2Vc3Ui):
: 146460673
: PING 10.0.0.6 (10.0.0.6): 56 data bytes
: 想要把146460673及56抓出來,
: 自己試過下列的regular expression:
: cat short_measurement_PING.txt | sed -r 's/([0-9]+).*PING.*([0-9]+) data bytes/\1 \2/g'
: cat short_measurement_PING.txt | sed -r 's/([0-9]+)$.*PING.*([0-9]+) data bytes/\1 \2/g'
: cat short_measurement_PING.txt | sed -r 's/^([0-9]+)$^.*PING.*([0-9]+) data bytes/\1 \2/g'
: 不過完全沒作用,
: 想請問大家有什麼建議嗎?
: 謝謝~
GNU sed only (應該)
sed -r '/^[0-9]+$/ N; s/([0-9]+)\n[^:]*: *([0-9]+).*/\1 \2/'
/^[0-9]+$/ N
^ 代表行開始, $ 代表行結束, N 會把下一行的資料抓進來
=> 符合單行僅有數字時把下一行資料抓進來,並加上 \n
=> 原本的 pattern space 為 146460673
現在變成 146460673\nPING 10.0.0.6 (10.0.0.6): 56 data bytes
s/([0-9]+)\n[^:]*: *([0-9]+).*/\1 \2/
這行為 extended regular expression
所以需要加 -r flag, 且括號不用加反斜線
因為用到 + operator 所以才需要 e-regex
+ 代表至少符合一個以上
作者: decken (HAHAHA~)   2016-06-01 16:31:00
謝謝,成功了
作者: john5478 (john5478)   2016-06-01 16:41:00
學到了一招,感謝!
作者: newwords (boombastic)   2016-06-02 17:11:00
有RegExp版

Links booklink

Contact Us: admin [ a t ] ucptt.com