我有一个大的日志文件需要排序,我想提取括号之间的文本。格式如下:
<@44541545451865156> (example#6144) has left the server!
我该如何提取“ example#6144”?
答案 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。正则表达式很难阅读,除非您习惯了它们,但对于通过以下方式提取文本最有用:模式,就像您在这里所做的一样。