簡體   English   中英

執行sed命令時執行錯誤

[英]Executing error while executing sed command

下面給出的sed命令在聯機BASH和KSH shell上運行良好,但是在嘗試在linux服務器上運行時出現錯誤“非法操作--r”。

我試圖做一個正則表達式來從第一行解析MFBBMYKLAXXX

echo "{1:F01MFBBMYKLAXXX2474811384}{2:O3001434181108BKKBTHBKBXXX12203020241811081534N}{3:{108:241C182AFFD4403C}}{4:
:15A:
:20:10168957
:22A:NEWT
:94A:BILA
:22C:BKKBBK8308MFBBKL
:82A:BKKBTHBK
:87A:MFBBMYKL
:15B:
:30T:20181108
:30V:20181109
:36:32,8308
:32B:THB2500000,
:53A:/610165
BKKBTHBK
:57A:BKKBTHBK
:33B:USD76148,01
:53A:CHASUS33
:57A:/04058664
BKTRUS33
:58A:MFBBMYKL
:15C:
:24D:ELEC/REUTERS D-3000
-}{5:{CHK:4117CD0206B7}}{S:{COP:S}}
" | sed -rn 's/.*\{1:F01([A-Z]{12}).*/\1/p'

sed -r (或某些方言sed -E )的使用是非標准和可選的。

它選擇一個稱為擴展正則表達式的正則表達式方言,它使您可以更簡潔地表達某些內容。

POSIX基本正則表達式支持幾乎相同的功能,但是使用奇數球語法,您必須對某些字符進行反斜杠以獲取其特殊含義(換句話說,它與反斜杠轉義的功能完全相反)。

因此,如果您有一個擴展的正則表達式,例如a+(b{2})c那么如果您的sed不支持-r-E ,請嘗試不帶任何特殊選項的a\\+\\(b\\{2\\}\\}c ,並希望您的sed至少與POSIX所指定的大致相同(但是,如果您認真地進行逆向計算,則不太可能。)

Ken Thompson最初的正則表達式實現僅支持regex元字符[...]. * ,而且很長一段時間以來,也都支持sed

當然,您總是可以安裝更現代的sed 我知道SunOS的xpg4目錄中曾經有一些好東西,但是我不知道Solaris是否是這種情況。 如果是這樣,也許您只需要將/usr/xpg4/binPATH (根據這個它在至少一個時間點是真實的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM