看板 Linux 關於我們 聯絡資訊
※ 引述《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 + 代表至少符合一個以上 --
dkchronos :招喚obov 04/16 19:23
cesar0909 :樓下obov04/16 19:42
SNGoMMX :樓下obov 04/16 21:50
y3k :上面好多obov 樓下繼續當obov 04/16 21:53
obov :恩 沒問題 繼續當obov04/16 22:20
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.181.25 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1464757148.A.A5E.html
decken: 謝謝,成功了 06/01 16:31
john5478: 學到了一招,感謝! 06/01 16:41
fix typo 剛剛去問男人發現其實 + 在 GNU sed & grep basic regex 裡其實是有支援的 只是跟 () 一樣要加 backslash 所以可以寫成 sed '/^[0-9]\+$/ N; s/\([0-9]\+\)\n[^:]*: *\([0-9]\+\).*/\1 \2/' 不過 + 並不是 POSIX Basic regex 標準,這應該是 GNU Extension POSIX Extended Regex 確定有 + ※ 編輯: s25g5d4 (140.117.181.25), 06/01/2016 17:22:24
newwords: 有RegExp版 06/02 17:11