如何通过Shell脚本处理分隔符文件,提取指定内容生成新文件?
简便实现字段替换的Shell脚本方案
针对你的需求,用awk或者sed都能写出一行式的简便脚本,不需要手动逐行循环读取,效率更高:
方法一:使用awk(推荐,语法更直观)
awk -F'~' -v OFS='~' '{sub(/.*<condition>.*/, "<condition>", $3); print}' input.txt > output.txt
说明:
-F'~':指定输入的字段分隔符为~-v OFS='~':设置输出的字段分隔符同样为~,保证格式一致sub(/.*<condition>.*/, "<condition>", $3):对第3个字段执行替换,不管字段里原有内容是什么,直接替换为<condition>- 最后通过
print输出整行,重定向到output.txt生成新文件
方法二:使用sed
sed 's/^\([^~]*~[^~]*~\).*\(<condition>\).*\(~.*\)/\1\2\3/' input.txt > output.txt
说明:
- 正则表达式通过分组捕获:
\([^~]*~[^~]*~\):捕获前两个字段和对应的~分隔符\(<condition>\):捕获目标内容<condition>\(~.*\):捕获第三个字段之后的所有内容
- 替换时用捕获的分组拼接成
前两个字段~<condition>~后续内容的格式
这两种方法都能直接处理原文件,生成你需要的结果,不需要复杂的循环逻辑。
内容的提问来源于stack exchange,提问作者OrangeGallery
相关产品推荐
相关产品推荐

