使用Unix工具(awk/sed/bash)截断第三列第四个下划线后内容
文本列处理实现方案
你可以通过awk或sed两种方式实现仅修改第三列的需求,两种方案的适配场景如下:
方案1:使用awk(推荐,逻辑更清晰)
awk天然支持按列处理文本,无需编写复杂的行匹配正则,操作命令如下:
# 处理后输出到新文件,避免原文件损坏 awk '{sub(/_i.*/, "", $3); print $0}' 原文件.txt > 处理后文件.txt # GNU Awk 4.1及以上版本支持直接原地修改,和sed -i效果一致 awk -i inplace '{sub(/_i.*/, "", $3); print $0}' 原文件.txt
命令说明:
- 内置函数
sub(匹配规则, 替换内容, 目标字段)仅对指定的第三列$3做替换 - 替换规则
/_i.*/匹配第三列中_i及之后的所有内容,替换为空即可实现截断效果 - 自动适配空格、制表符等多种空白分隔符,无需额外调整正则
方案2:使用sed实现
如果需要用sed完成,需要编写正则匹配定位到第三列的位置,仅对第三列内容做替换:
# 原地修改文件 sed -i 's/^\([^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+\)_i[^[:space:]]*/\1/' 原文件.txt
命令说明:
- 正则中
[^[:space:]]\+匹配连续的非空白字符,对应单列内容 [[:space:]]\+匹配列之间的任意空白(单个/多个空格、制表符都可适配)- 前两个捕获组匹配前两列及分隔符,第三个捕获组匹配第三列
_i之前的内容,最后用捕获的内容替换整段匹配结果,实现仅截断第三列的效果
内容的提问来源于stack exchange,提问作者Nina M Maryn
相关产品推荐
相关产品推荐

