Regex 在Unix中从行中提取字符串
我有一个包含以下内容的文件:Regex 在Unix中从行中提取字符串,regex,linux,sed,ksh,Regex,Linux,Sed,Ksh,我有一个包含以下内容的文件: 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'/\b垂直。*\]/d'文件名 我遗漏了什么吗?您需要使用替换命令-d用于在给定正则表达式匹配时删除整行 $ sed 's/\bvertical.*\]//' ip.txt code_
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'/\b垂直。*\]/d'文件名
我遗漏了什么吗?您需要使用替换命令-
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 $1,$(NF-1),$NF}' <<< "code_name:00:12 vertical 01 1.3489:27 vsftypyre.01 [91.02.01.6] 29.05.2018 {1705}"
awk'{print$1,$(NF-1),$NF}'如果文件中的记录始终为该形状,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个字段。啊,我没有意识到-d
会删除整行,谢谢:)