我有下一个输出:
Date Time: June 22 12:40:00
Product User Host IP
Software User User *.***.***.***
Software1 User User *.***.***.***
sed
我尝试了和 的一些功能awk
,但不起作用;我希望文本保持在下一个方向:
Date Time: June 22 12:40:00
Product User Host
Software User User
Software1 User User
我有下一个命令:
$ cat Mathematica_06-* | \
grep -w -A 4 -B 5 "AER8\|User\|User1\|User2\|User3\|User4\|User5\|User6\|User7\|User7\|User8\|User9\|User10\|User11\|User11\|User12\|User13\|User14\|User15\|User16\|User17\|User18\|User19" | \
awk '{print $1,$3,$4,$5,$7}' | \
egrep -v
> Output.log
我尝试在最后添加egrep -v "|IP"
,但如果我将该行放入该命令中,我将获得下一个输出:
Date Time: June 22 12:40:00
Softare User User
Software User User
有没有其他方法可以删除“IP”和“*”部分而不影响该行的其余部分?
答案1
使用 sed
sed -i -e 's/\*.*//g' -e 's/ IP//g' -e '\$^Syntax.*$d' File*
这也应该有效:
awk '/Date/{print $0} /^Product|^Soft/{print $1" "$2" "$3} /^$/' File*
答案2
这是一种方法awk
。变量NR
代表记录号;如果是第一个,就打印它。 awk
从 1 开始计算字段,因此您是说您只需要此后的前三个:
awk 'NR==1 {print;next};{print $1,$2,$3}'
答案3
用于sed
删除第 5 行及以后的最后一个单词及其前面的任何空格或制表符:
$ sed -E '5,$s/[[:blank:]]*[^[:blank:]]+$//' file
Date Time: June 22 12:40:00
Product User Host IP
Software User User
Software1 User User
寻址5,$
从第 5 行开始的每一行,作用于这些行的替换将删除任意数量的空格或制表符,后跟行末尾由非空格和非制表符组成的内容。