Unix行内字符串提取问题:sed命令未返回预期结果
问题分析与解决
你的sed命令出错的核心原因是用错了操作指令:你用的/pattern/d是删除整个匹配到该模式的行,但你实际想要的是删除行内从vertical到]的部分,而不是删掉整行。
错误命令拆解
sed '/\bvertical.*\]/d' file_name
这个命令的逻辑是:找到所有包含vertical到]这段内容的行,然后把整行都删掉,完全偏离了“修改行内内容保留首尾部分”的需求。
正确的解决方案
你需要使用sed的替换指令s/pattern/replacement/,匹配行内需要删除的片段,将其替换为空字符串。具体命令如下:
sed 's/\bvertical.*\]//' file_name
执行后你会发现code_name:00:12和29.05.2018之间有两个空格(原内容中]后面的空格会被保留),如果想要更干净的输出,可以调整正则,把]后面的空格也纳入匹配范围:
sed 's/\bvertical.*\] //' file_name
验证效果
假设你的文件内容是:
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}
内容的提问来源于stack exchange,提问作者ashish_k
相关产品推荐
相关产品推荐

