egrep 在 SunOS 系統上無法正常工作
這是我想在 SunOS 上實現的目標:
只有
[text_text=text]
,或之類的模式才是有效的模式,[text=text]
我的意思是. 除此以外的任何內容都是無效模式。即應該擷取它。, , ,之類的模式也應該是無效的[text]``text``text``0-9,a-z,A-Z, space, newline, tab, enter``egrep -v``[[[text]``[text]]]``[text``text]
我在 Linux 機器(RHEL)上使用了以下內容,它工作得非常好:
egrep -v "^[ ]*([a-zA-Z0-9\t\n\v\f\r ]*|\[{1}[_a-zA-Z0-9\t\n\v\f\r ]*(=[a-zA-Z0-9\t\n\v\f\r ]*)?\]{1})[ ]*$" file1
文件1:
[FEATURE_ID=2] [FEATURE_REV=1] [NO_OF_BYTES=18] 001203658080400160b9d0ae45000080 [CRC] c068
在 RHEL BOX 上,
egrep -v
上面的語句沒有按預期給出任何輸出我如何在 Solaris 中實現這一點,因為它不起作用並給出輸出:
[FEATURE_ID=2] [FEATURE_REV=1] [NO_OF_BYTES=18] [CRC]
與 Solaris 上的常見情況一樣,
/usr/bin/egrep
它是一個不符合 POSIX 的遺留實現,而/usr/xpg4/bin/egrep
它是一個符合 POSIX 的實現,並且除了 POSIX 之外幾乎沒有任何東西。除非您正在執行 POSIX 之前的遺留 Solaris 應用程序,否則請確保**/usr/xpg4/bin
在/usr/bin
您的$PATH
**.GNU 工具(您習慣於在 Linux 上使用)通常具有許多超出 POSIX 要求的功能。如果您需要可移植性,請堅持使用 POSIX。POSIX 沒有定義
egrep
;它是 的廣泛同義詞grep -E
,即grep
具有擴展的正則表達式語法。Solaris
/usr/bin/egrep
不支持{…}
出現次數。你只是{1}
在這裡使用它沒有任何效果,所以把它放下。
egrep
Solaris或Solaris 上的實現都不grep -E
支持控製字元的反斜杠轉義。那是一個 GNU 擴展。POSIX 未定義反沖字母。使用[:space:]
類而不是\t\n\v\f\r
.LC_CTYPE=C grep -Ev '^[ ]*([[:alnum:][:space:]]*|\[[_[:alnum:][:space:]]*(=[[:alnum:][:space:]]*)?\])[ ]*$' file1