sed条件删除文本字符时如何保留原列间空格格式?
解决sed命令修改后空格格式丢失的问题
问题分析
你当前的sed命令之所以会改变第三列和第四列之间的空格数量,是因为命令末尾匹配了[[:blank:]]+并将其替换为单个空格,这会覆盖掉原本的空格格式,导致间距被修改。
修正后的命令
要保留原有的空格格式,我们只需要针对目标字段(即包含34的那一段非空白字符)进行修改,完全不触碰字段前后的空格:
sed -E 's/([[:blank:]][^[:blank:]]{10})34([^[:blank:]]+)/\1\2/' file
命令解释
([[:blank:]][^[:blank:]]{10}):捕获目标字段前的空格,加上字段的前10个字符34:匹配需要删除的两个字符([^[:blank:]]+):捕获目标字段中34之后的剩余部分\1\2:将匹配到的内容替换为前10个字符加剩余部分,去掉中间的34
这样修改只会移除目标字段中的34,而字段前后的空格完全保持原样。
预期输出
执行修正后的命令后,输出内容如下:
HEADER2023053112460600000004000000000.000002023053112364820230531123707 20230704225151KKKKKKKKK 9C28F1EB011234567890123 0000472MO000000000.00000N82 20230703215437KKKKKKKKK 992CEDE001112233445 0000022MO000000000.00000NSL 20230704111018KKKKKKKKK A4C0B8000127987654321 0000532MO000000000.00000NSL
可以看到,第三列和第四列之间的空格数量和原始文件完全一致,同时成功删除了目标字段中的34。
内容的提问来源于stack exchange,提问作者Alan Mackey
相关产品推荐
相关产品推荐

