使用Bash脚本结合Sed条件为文件指定字段添加W前缀
用Sed实现条件添加前缀的解决方案
针对你需要给每行第二个|后非W开头的内容添加W前缀的需求,这里有个简洁的Sed命令可以搞定:
sed -E 's/^([^|]*\|[^|]*\|)([^W])/\1W\2/' your_input_file.txt
命令细节解释:
-E:启用扩展正则表达式,让分组和匹配逻辑更简洁,不用额外转义括号^([^|]*\|[^|]*\|):捕获行开头到第二个|的完整部分(也就是前两个字段加分隔符),存为第一个捕获组\1([^W]):匹配第二个|后的第一个字符,仅当这个字符不是W时才触发替换,把这个字符存为第二个捕获组\2\1W\2:将匹配到的部分替换成「第一个捕获组」+W+「第二个捕获组」,从而给非W开头的内容自动加上前缀
测试效果验证:
拿你提供的输入示例测试,处理后结果如下:
ABD|66732|W987|01/06/2019 10:00|I
ABD|66732|W927|01/06/2019 10:01|I
ABD|66732|W917|01/06/2019 10:02|I (原内容已以W开头,无变化)
ABD|66732|W947|01/06/2019 10:03|I
ABD|66732|W977|01/06/2019 10:04|I (原内容已以W开头,无变化)
ABD|66732|W997|01/06/2019 10:05|I
直接修改原文件的方式:
如果需要直接修改原文件(而不是仅输出到终端),可以加上-i选项:
- GNU Sed(Linux环境):
sed -i -E 's/^([^|]*\|[^|]*\|)([^W])/\1W\2/' your_input_file.txt - BSD Sed(macOS环境):
sed -i '' -E 's/^([^|]*\|[^|]*\|)([^W])/\1W\2/' your_input_file.txt
内容的提问来源于stack exchange,提问作者Sandeep Misra
相关产品推荐
相关产品推荐

