Unix环境下替换管道分隔文件第四列指定字符串的方法
解决管道分隔文件第四列特定字符串替换问题
这里有两种实用的命令行工具方案,完美匹配你的需求——仅将第四列中的1-8替换为01-08,其余列内容丝毫不改动:
方法一:用awk处理(推荐,列操作更直观)
awk天生擅长按列处理文本,命令逻辑清晰易懂:
awk -F'|' 'BEGIN{OFS="|"} $4 == "1-8" { $4 = "01-08" } 1' input.txt > output.txt
命令细节解释:
-F'|':指定输入文本的分隔符为管道符|BEGIN{OFS="|"}:设置输出文本的分隔符同样为|,确保输出格式和输入完全一致$4 == "1-8" { $4 = "01-08" }:精准判断第四列内容为1-8时,将其替换为01-08- 最后的
1:是awk的简化写法,代表打印所有行(不管该行是否被修改过)
方法二:用sed处理(正则匹配方式)
如果你更习惯sed的正则语法,可以使用这个命令:
sed -E 's/^([^|]*\|[^|]*\|[^|]*\|)1-8/\101-08/' input.txt > output.txt
命令细节解释:
-E:启用扩展正则表达式,让语法更简洁易读^([^|]*\|[^|]*\|[^|]*\|):捕获行首到第四列前的所有内容(包含前三个列及对应的管道符)1-8:匹配第四列中精确的1-8字符串\101-08:将匹配到的内容替换为之前捕获的前缀加上01-08
效果验证
拿你提供的示例输入行来说:
CCSM01|CAM||1-8|NAP|CR|CLOSED|1
经过处理后会变成:
CCSM01|CAM||01-08|NAP|CR|CLOSED|1
完全符合你的期望输出。
内容的提问来源于stack exchange,提问作者alejomarchan
相关产品推荐
相关产品推荐

