我有这个日志,我想从中提取信息.我想用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
解决方法:
使用此模式:
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)
标签:linux,sed,text-processing
来源: https://codeday.me/bug/20190629/1326135.html