如何用sed精准批量替换文件特定字符并提取纯数字?
精准处理文本的sed方案
针对你的需求,我们可以用更严谨的正则表达式实现,避免误替换的情况:
最终命令
sed -E 's/\r//g; s/(^|\s)-(\s|$)/\10\2/g; s/([0-9]+)MB/\1/g' file1 | column -t
命令细节解释
s/\r//g:保留你原有的处理逻辑,移除Windows格式的换行符,避免出现多余的^M字符s/(^|\s)-(\s|$)/\10\2/g:精准匹配独立存在的连字符:(^|\s)匹配行首或者空格,(\s|$)匹配空格或者行尾,确保只替换完全孤立的-- 替换时保留前后的空白(
\1和\2),只把中间的-换成0,不会破坏原有空格布局
s/([0-9]+)MB/\1/g:精准移除数字末尾的MB:([0-9]+)捕获连续数字,只替换紧跟在数字后的MB为捕获的数字,其他位置的MB不会被处理
column -t:保持输出内容的排版整齐,和你原有的用法一致
测试效果
用你的示例数据测试,输出结果和预期一致,但处理逻辑更严谨:
3708 5073 5153 0 0 63097 9939 53376 0 817 681 271 0 2655 692 2112
内容的提问来源于stack exchange,提问作者micron cloud
相关产品推荐
相关产品推荐

