如何检索括号内的值

如何检索括号内的值

我需要检索仅在总命令行中出现在括号中的数字。

例如:

$ cat exa.lg
02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open (45)
02:57:25 BROKER  1: Unable to open 999. (13)
02:57:25 BROKER  : Unable to open 1295, (1098)

我需要获取括号中的错误号信息1295,而不是命令行 ( BROKER : Unable to open 1295)

我尝试过这个:

cat exa.lg | awk -F '[)(]' '{print $2}' | grep -E '1295|13' exa.lg
02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open 999. (13)
02:57:25 BROKER  : Unable to open 1295, (1098)

但我得到了两个1295数字(包括 中的数字02:57:25 BROKER : Unable to open 1295)。

我只想取02:57:25 BROKER : Unable to open errno =. (1295)

我怎样才能做到这一点?

答案1

在正则表达式中包含括号。您需要转义它们,因为它们在正则表达式中具有特殊含义。

grep -E '\((1295|13)\)' exa.lg

答案2

简单的awk解决方案:

awk '/\((1295|13)\)/{ print }' exa.lg

输出:

02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open 999. (13)

  • /\((1295|13)\)/- 匹配一条记录(1295)(13)一条记录内的内容。 (也可以表示为/(1295)|(13)/

答案3

我假设您想要打印包含 a131295括号中的所有行。如果是这样,您可以执行以下操作:

$ grep -E '\(1295|13\)' exa.lg
02:57:25 BROKER  : Unable to open errno =. (1295)
02:57:25 BROKER  1: Unable to open 999. 

cat不需要原始命令的 ,因为两者都awk可以grep将文件名作为输入。另外,您的操作awk毫无意义,因为您的grep操作是在文件 ( grep exa.lg) 上运行,而不是在 awk 的输出上运行。

答案4

cat input | grep ".=" > output

或者

cat input | grep "errno" > output

你将拥有:

02:57:25 BROKER  : Unable to open errno =. (1295)  

但您必须确保所有这些类型的行都具有这些唯一标识符(即其他行都没有这些单词/符号):
“errno”或“=”。

相关内容