文本:
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.
答案 0 :(得分:0)
不要将所有字符(.*
)后跟一个点,而应该取“除点之外的所有字符”([^\.]*
)后跟一个点:
sed 's/.*\(ERROR:[^\.]*\.\).*/\1/'
答案 1 :(得分:0)
Sed默认使用贪婪匹配,似乎sed不支持非贪婪匹配,所以它会尽可能长时间匹配。
您可以将括号中的.*\.
更改为[^.]*\.
以匹配非点字符然后跟随点,这应该表现得像非贪婪的匹配。或者您可以使用更强大的正则表达式引擎,如perl:
perl -pe 's/.*(ERROR:.*?\.).*/\1/'
答案 2 :(得分:0)
您可以使用sed
$ sed -r 's/.*(ERROR[^.]*\.).*/\1/' log
ERROR: ORA-00257: archiver error.