如何使用sed替换特定匹配模式且不丢失文件原有内容
解决方法
你可以直接用sed的替换命令结合分组捕获实现需求,不需要额外拆分处理流程,原有文件中不匹配的内容会原样保留:
sed -E 's/([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})/\1\2\3-\4\5\6/g' file.txt > output.txt
参数说明
-E:启用扩展正则表达式,减少括号的转义字符输入- 替换规则里用6个分组分别捕获每一组两位的十六进制字符,拼接时去掉前3组、后3组内部的空格,两组之间插入短横线
- - 末尾的
g表示全局替换,一行内如果有多个符合规则的模式都会被替换
如果需要直接修改原文件,建议先备份再操作,命令如下:
# 执行后会生成file.txt.bak备份文件,原文件直接修改为替换后的内容 sed -i.bak -E 's/([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})\s([a-z0-9]{2})/\1\2\3-\4\5\6/g' file.txt
执行上述命令后,你给出的样例输入会直接输出期望的结果。
内容的提问来源于stack exchange,提问作者Javier Gonzalez
相关产品推荐
相关产品推荐

