[英]Linux command to extract a text
文本:
All rights reserved. ERROR: ORA-00257: archiver error. Connect internal only, error. SP2-0751: Unable to connect to oracle. Exiting SQL*Plus
我的預期輸出:
ERROR: ORA-00257: archiver error.
我的命令:
sed 's/.*\(ERROR:.*\.\).*/\1/'
實際輸出:
ERROR: ORA-00257: archiver error. Connect internal only, error. SP2-0751: Unable to connect to oracle.
我如何調整sed命令以僅顯示以下內容:
ERROR: ORA-00257: archiver error.
不要取所有字符( .*
)后接點,而應取“除點之外的所有字符”( [^\\.]*
)后接點:
sed 's/.*\(ERROR:[^\.]*\.\).*/\1/'
sed默認情況下使用貪婪匹配,並且sed似乎不支持非貪婪匹配,因此它將盡可能長地匹配。
您可以更改.*\\.
在括號中插入[^.]*\\.
要匹配非點字符,然后跟隨點,則其行為應類似於非貪婪匹配。 或者,您可以使用功能更強大的正則表達式引擎,例如perl:
perl -pe 's/.*(ERROR:.*?\\.).*/\\1/'
您可以使用sed
達到相同的目的
$ sed -r 's/.*(ERROR[^.]*\.).*/\1/' log
ERROR: ORA-00257: archiver error.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.