下面是我想在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
答案 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'