用于删除文本的Shell命令

时间:2017-07-24 15:17:19

标签: shell

下面是我想在shell命令中用作输入的网络日志。我需要一个shell命令,它应该删除除最后数据列之外的所有数据。我的输入和输出已在下面提供。请帮忙。

INPUT:

SHRNCE4> pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r
....

Report from 2017-07-24 13:30 UTC to 2017-07-24 14:29 UTC (4 ropfiles)
Node SW: CXP9021776/6_R2XA08

Date: 2017-07-24
Time  Object           pmNoTimesIfhoCellFailAddToActSet
18:00 ManagedElement=1                              191
18:15 ManagedElement=1                              205
18:30 ManagedElement=1                              178
18:45 ManagedElement=1                              215


SHRNCE4> 

输出:

Time  Object           pmNoTimesIfhoCellFailAddToActSet
18:00 ManagedElement=1                              191
18:15 ManagedElement=1                              205
18:30 ManagedElement=1                              178
18:45 ManagedElement=1                              215

4 个答案:

答案 0 :(得分:0)

您可以使用|将命令的输出定向到sed - 实用程序来编辑字符流。使用:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | sed -e '1,4d'

这应该在屏幕上打印您想要的输出

-e '1,4d'告诉sed删除它收到的前四行输入

相关:  Delete specific line number(s) from a text file using sed? http://www.grymoire.com/Unix/Sed.html

答案 1 :(得分:0)

使用awk

awk '/Time/{f=1}f && !NF{exit}f'

您的命令变为:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | awk '/Time/{f=1}f && !NF{exit}f'

测试结果:

输入:

akshay@db-3325:/tmp$ cat testfile
....

Report from 2017-07-24 13:30 UTC to 2017-07-24 14:29 UTC (4 ropfiles)
Node SW: CXP9021776/6_R2XA08

Date: 2017-07-24
Time  Object           pmNoTimesIfhoCellFailAddToActSet
18:00 ManagedElement=1                              191
18:15 ManagedElement=1                              205
18:30 ManagedElement=1                              178
18:45 ManagedElement=1                              215

输出:

akshay@db-3325:/tmp$ awk '/Time/{f=1}f && !NF{exit}f' testfile
Time  Object           pmNoTimesIfhoCellFailAddToActSet
18:00 ManagedElement=1                              191
18:15 ManagedElement=1                              205
18:30 ManagedElement=1                              178
18:45 ManagedElement=1                              215

答案 2 :(得分:0)

sed可用于打印从匹配模式的行到输入末尾的所有行:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | sed -n '/^Time/,$p'

如果最后需要删除空行,可以将输出传送到sed '/^$/d'以删除它们:

pmxznh . pmNoTimesIfhoCellFailAddToActSet -m 1 -r | sed -n '/^Time/,$p' | sed '/^$/d'

DETAIL

要打印的第一行匹配的模式(正则表达式)为^Time/^Time/,$描述了要打印的行的范围; $表示“到最后一行”。最后的p是应用于这些行的命令,它代表“打印”。换句话说,从第一行打印,以字符串“Time”开头直到输入结束。

-n选项用于禁用sed的默认行为,即将每行输入回显到标准输出。

如果输入中有其他以“Time”开头的行,则可能需要修改要打印的第一行的正则表达式。

答案 3 :(得分:0)

如果您的输出与显示的样本相同,那么以下内容可能对您有帮助。

Your_command | awk '/^Time/{val=1} val'