我有这个日志,我想从中提取信息。我想用sed
来提取它。
Nov 12 19:56:52 libra kernel: [ 1353.27355] WarningIN=em0 OUT=eth0 MAC=c8:1b:3c:fd:5D:e9:90:a9:8F:43:83:E3:15:0e SRC=222.171.89.16 DST=49.137.111.136 LEN=222 TOS=0x8C PREC=0xbF TTL=107 ID=31469 PROTO=ICMP TYPE=35 CODE=8 ID=24917 SEQ=166
19:56:52 12 Nov;Warning;em0;eth0;222.171.89.16;49.137.111.136;ICMP;;
我对sed
的理解有困难。
如果有人能在这里纠正我,这将是伟大的。
我想先得到约会,所以我写了
$ sed 's/\([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/' file.log
但我的输出是
Nov 12 19:56:52
我不明白为什么我不只是得到19:56:52
答案 0 :(得分:1)
使用此模式:
sed -r 's/(^.*\s)([0-9][0-9][:][0-9][0-9]:[0-9][0-9])(.*$)/\2/'
以下是一个例子:
echo "Nov 12 19:56:52 libra kernel" | sed -r 's/(^.*\s)([0-9][0-9][:][0-9][0-9]:[0-9][0-9])(.*$)/\2/'
=> 19:56:52
如果您只想使用sed打印所有文件内容,则可以使用:
sed r FILE
如果你想让sed像grep
那样行事:
sed -n '/regexp/p' FILE # method 1
sed '/regexp/!d' FILE # method 2
或者,如果您希望它像grep -v
sed -n '/regexp/!p' FILE # method 1, corresponds to above
sed '/regexp/d' FILE # method 2, simpler syntax
你也可以找到一大堆sed one-liners here(事实上,上面的grep示例来自这里链接的网页 - 除了我添加了FILE
每个它们)
答案 1 :(得分:1)
简单地说,您不只是获得19:56:52
,因为您的模式与Nov 12
不匹配。
如果您将.*
添加到模式的开头以匹配Nov 12
,它将按预期工作。这是更正的命令:
$ sed 's/.*\([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/' file.log
答案 2 :(得分:1)
sed -n 's/\([[:alpha:]]\{3\}[[:blank:]]\{1,\}[0-9]\{1,2\}\)\{0,1\}[[:blank:]]\{1,\}\([0-9]\{1,2\}:}[0-9]\{1,2\}:}[0-9]\{1,2\}\).*/\2/p' YourFile
第一个小时if(其中一个案例)
并打印
小时是否在其他地方或其他模板(并且不打印线)