Linux系统中如何在文本行出现数字时对字符进行拆分
Linux文本行按首个数字位置拆分实现方案
针对文本行从第一个数字出现位置拆分、前后段用两个空格分隔的需求,以测试文件testfile.txt(内容为demo_test_file_2022-06-06)为例,可通过以下两种常用命令实现,最终输出结果为demo_test_file_ 2022-06-06。
方案1:sed 实现(轻量简洁)
- 仅输出结果到终端,不改动原文件:
sed 's/^\([^0-9]*\)\([0-9].*\)$/\1 \2/' testfile.txt
- 需要直接修改原文件时,加入
-i参数:
sed -i 's/^\([^0-9]*\)\([0-9].*\)$/\1 \2/' testfile.txt
逻辑说明:正则分别捕获行首到第一个数字前的所有非数字内容、第一个数字到行尾的内容,替换时在两段内容中间插入两个空格;行内无数字时会原样输出,不会产生异常改动。
方案2:awk 实现(扩展性更强)
如果后续需要调整分隔规则、添加额外文本处理逻辑,可使用awk的字符串匹配能力实现,兼容无数字行的原样输出:
awk '{ if (match($0, /[0-9]/)) { print substr($0, 1, RSTART-1) " " substr($0, RSTART) } else { print $0 } }' testfile.txt
逻辑说明:通过match函数定位行内第一个数字的下标位置,分别截取数字前后的子串,拼接两个空格后输出;未匹配到数字的行直接打印原文。
结果验证
命令执行完成后,可执行cat testfile.txt查看文件内容,确认输出符合预期。
内容的提问来源于stack exchange,提问作者Manoj Kumar
相关产品推荐
相关产品推荐

