我有一个包含内容的文件:
code_name:00:12 vertical 01 1.3489:27 vsftypyre.01 [91.02.01.6] 29.05.2018 {1705}
预期产出:
code_name:00:12 29.05.2018 {1705}
我正在尝试下面的命令,但它没有给出结果:
sed '/\bvertical.*\]/d' file_name
我错过了什么吗?
答案 0 :(得分:0)
您需要使用替换命令 - d
用于在给定正则表达式匹配时删除整行
$ sed 's/\bvertical.*\]//' ip.txt
code_name:00:12 29.05.2018 {1705}
$ # ] doesn't require escaping
$ sed 's/\bvertical.*]//' ip.txt
code_name:00:12 29.05.2018 {1705}
请注意*
是贪婪的,因此.*]
会尝试尽可能匹配
$ echo 'good foo [123] baz [456]' | sed 's/foo.*]//'
good
$ # this will delete only up to first ] after 'foo'
$ echo 'good foo [123] baz [456]' | sed 's/foo[^]]*]//'
good baz [456]
答案 1 :(得分:0)
即使问题没有用awk
标记,也很容易使用此工具提取一些列:
awk '{print $1,$(NF-1),$NF}' <<< "code_name:00:12 vertical 01 1.3489:27 vsftypyre.01 [91.02.01.6] 29.05.2018 {1705}"
NF
表示当前行的字段数,因此$NF
是该行的最后一个元素。
答案 2 :(得分:0)
如果文件中的记录始终是那个形状,8个字段用空格分隔,那么awk可能是一个更简单的解决方案:
> cat file_name
code_name:00:12 vertical 01 1.3489:27 vsftypyre.01 [91.02.01.6] 29.05.2018 {1705}
> cat file_name | awk '{ print $1, $7, $8 }'
code_name:00:12 29.05.2018 {1705}
上述awk
脚本含义,对于每条记录,打印第1,第7和第8个字段。