簡體   English   中英

Linux命令提取文本

[英]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.

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