如何在指定分隔符后执行正则表达式匹配与替换?
高效解决方案:仅处理分隔符后的内容
直接用命令行工具一步完成,不用拆分文件,效率拉满:
方法1:awk(最直观易读)
利用awk的字段分割和字符串替换功能,一次处理完成:
awk -F':' '{gsub(/[0-9]/,"",$2); print $1":"$2}' file.txt > fileresults.txt
解释:
-F':'把每行按冒号拆成两部分,$1是冒号前的内容,$2是冒号后的内容gsub(/[0-9]/,"",$2)把$2里的所有数字替换为空(也就是删除)- 最后把处理后的
$1和$2用冒号拼接输出
方法2:sed(纯正则处理)
用sed的循环替换逻辑,只删除冒号后的数字:
sed ':a; s/\(:[^0-9]*\)[0-9]/\1/; ta' file.txt > fileresults.txt
解释:
:a定义一个循环标记as/\(:[^0-9]*\)[0-9]/\1/匹配冒号后跟着任意非数字字符,再跟一个数字,把这个数字删掉ta如果刚才的替换成功了,就回到标记a继续循环,直到冒号后没有数字为止
方法3:Perl(简洁的正则后顾)
用Perl的正向后顾断言,精准匹配冒号后的数字:
perl -pe 's/(?<=:.*)[0-9]//g' file.txt > fileresults.txt
解释:
(?<=:.*)是正向后顾断言,确保匹配的数字前面有冒号(也就是在冒号之后的位置)[0-9]匹配数字,替换为空,g表示全局替换
这三种方法都能直接处理原文件,不用拆分合并,比你之前的临时方法高效得多。
内容的提问来源于stack exchange,提问作者user8952195
相关产品推荐
相关产品推荐

