Solaris

如何在 Solaris 上提取正則表達式的匹配部分

  • July 23, 2017

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

即使您要搜尋的序列出現在沒有前導字元的行首,後兩個範例仍然有效。

引用自:https://serverfault.com/questions/111742