Solaris
如何在 Solaris 上提取正則表達式的匹配部分
GNU 的 grep 有選項
--only-matching
,它只列印正則表達式的匹配區域。我在一個沒有安裝任何 GNU 工具的 Solaris 5.10 機器上,我正在嘗試實現同樣的目標。例子:grep -Eo "[0-9]+ ms" *.log
是否有可以做同樣事情的 sed 或 awk 表達式?
sed -n 's/.*[^0-9]\([0-9]\+ ms\).*/\1/p' *.log
sed
支持此類交替的版本的可能改進:sed -n 's/\(^\|.*[^0-9]\)\([0-9]\+ ms\).*/\2/p' *.log
在 OS X 中,我不得不使用擴展的正則表達式,因為我無法讓基本的增強正則表達式工作(如果你更改為GNU
sed
,這也可以工作,但基本的增強版本也可以在那里工作):-E``-r
sed -En 's/(^|.*[^0-9])([0-9]+ ms).*/\2/p' *.log
即使您要搜尋的序列出現在沒有前導字元的行首,後兩個範例仍然有效。