仅从Linux终端中的文件获取括号内的文本

时间:2019-01-31 00:51:25

标签: linux bash parsing

我有一个大的日志文件需要排序,我想提取括号之间的文本。格式如下:

<@44541545451865156> (example#6144) has left the server!

我该如何提取“ example#6144”?

3 个答案:

答案 0 :(得分:2)

有很多方法可以给这只猫剥皮。

假设括号中始终只有一个词素,则可以使用bash参数扩展:

while read t; do echo $(t=${t#*(}; echo ${t%)*}); done <logfile

第一个替换项:${t#*(}切断所有内容,包括左括号,使您剩下example#6144) has left the server!;第二个:${t%)*}切断了右括号以及之后的所有内容。

或者,您也可以使用awk

awk -F'[)(]' '{print $2}' logfile

-F'[)(]'告诉awk使用任一括号作为字段定界符,因此它将输入字符串分成三个标记:<@44541545451865156>example#6144和{{1} };然后has left the server!指示它打印第二个令牌。

{print $2}也可以:

cut

答案 1 :(得分:2)

$ git config -l应该在这里工作:

sed

答案 2 :(得分:0)

尝试一下:

sed -e 's/^.*(\([^()]*\)).*$/\1/' <logfile

/^.*(\([^()]*\)).*$/是一个正则表达式 regex。正则表达式很难阅读,除非您习惯了它们,但对于通过以下方式提取文本最有用:模式,就像您在这里所做的一样。