用sed删除一行的一部分?

用sed删除一行的一部分?

我有下一个输出:

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 行开始的每一行,作用于这些行的替换将删除任意数量的空格或制表符,后跟行末尾由非空格和非制表符组成的内容。

相关内容