我已经阅读了grep命令的手册并尝试了一些方法,但是它们都没有起作用,至少对我来说不行。
我想在查看日志时提取一行良好可读的信息。 这是我想要美化的通用日志文件中的一行:
26 Jan 2018 08:32:29,309 [TEXT] (myService-0) long.text.I.dont.care.about.but.is.different.in.every.line: [OTHERTEXT] Text im actually interested in
What I want is this:
26 Jan 2018 08:32:29,309 [TEXT] [OTHERTEXT] Text im actually interested in
我知道使用
grep -o -e ".*\[TEXT\]"
可以得到第一部分,使用grep -o -e "\[OTHERTEXT\].*"
可以得到第二部分。但是这两个部分不会在同一行显示,即使我将它们组合成
grep -o -e ".*\[TEXT\]" -e "\[OTHERTEXT\].*"
也不行。
[TEXT]
和[OTHERTEXT]
总是存在的,它们是我的“分隔符”,因此可以用来支持提取我需要的部分。我最初认为可以使用
grep -o -e "(.*\[TEXT\]).*(\[OTHERTEXT\].*)"
,然后以某种方式使用匹配组$1
和$2
,但是要么我看不到方法,要么就没有办法这样做。有没有办法实现我想要的效果?
首选是使用
grep
(仅因为我想更多地了解它),但如果不可能,则awk
或sed
也可以,只要能够与tail -f
一起使用即可。我也开放其他方法来达到这个目标,所以让我知道有哪些方法可以到达那里。
谢谢,Tobias
sed -E "s/(.*\[TEXT\]).*(\[OTHERTEXT\].*)/\1 \2/"
- ximarin.*
并不是必须的。只需要sed -E 's/(\[TEXT]).*(\[OTHERTEXT])/\1 \2/'
也可以正常工作。 - anubhavased -E "s/\].*\[//"
。 - ximarinsed -E "s/\].*\[//"
可能适用于这行代码,但如果在[TEXT]
之前或之后有另一个[...]
,那么它将失败。 - anubhava