从 Unix 中的一行中提取字符串
extracting string from a line in Unix
我有一个包含以下内容的文件:
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
我是不是漏掉了什么?
您需要使用替换命令 - 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]
即使问题没有用 awk
标记,也可以很容易地使用此工具提取一些列:
awk '{print ,$(NF-1),$NF}' <<< "code_name:00:12 vertical 01 1.3489:27 vsftypyre.01 [91.02.01.6] 29.05.2018 {1705}"
NF
表示当前行的字段数,所以$NF
是该行的最后一个元素。
如果您文件中的记录总是那种形状,8 个字段由白色分隔 space,那么 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 , , }'
code_name:00:12 29.05.2018 {1705}
上面awk
脚本的意思是,对于每条记录,打印第1、7、8字段。
我有一个包含以下内容的文件:
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
我是不是漏掉了什么?
您需要使用替换命令 - 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]
即使问题没有用 awk
标记,也可以很容易地使用此工具提取一些列:
awk '{print ,$(NF-1),$NF}' <<< "code_name:00:12 vertical 01 1.3489:27 vsftypyre.01 [91.02.01.6] 29.05.2018 {1705}"
NF
表示当前行的字段数,所以$NF
是该行的最后一个元素。
如果您文件中的记录总是那种形状,8 个字段由白色分隔 space,那么 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 , , }'
code_name:00:12 29.05.2018 {1705}
上面awk
脚本的意思是,对于每条记录,打印第1、7、8字段。