使用sed删除指定位置到KCNQ1前内容仅首行生效如何解决
问题原因
你写的sed命令存在两点问题,导致仅第一行被修改:
- 你使用固定数量的
.匹配需要删除的内容区间,但不同行里「前19个字符结束位置到KCNQ1首字母K的位置」之间的字符长度并不一致,只有第一行刚好匹配你写的长度,后续两行因为中间内容更长,正则匹配失败,所以没有被修改。 - 你的正则没有固定前19个字符的行首位置,在内容更复杂的行中还可能匹配到非预期的位置。
正确解决方法
使用捕获组+非K字符匹配的规则,即可兼容所有行的处理,命令如下:
sed -e 's/^\(.\{19\}\)[^K]*/\1 /' file.rpt > file_new.rpt
正则规则说明
^匹配行首,确保从每行开头开始计算字符\(.\{19\}\)捕获行首前19个任意字符,存储为第一个捕获组[^K]*匹配前19个字符之后所有不是K的字符,直到遇到第一个K(也就是KCNQ1的首字母)为止\1替换时保留捕获到的前19个字符,加一个空格,后面的KCNQ1及后续内容会自动保留
内容的提问来源于stack exchange,提问作者WithSci
相关产品推荐
相关产品推荐

