如何移除文本文件中每行指定位置字段?sed命令失效求助
解决文本文件移除指定字段的问题
问题描述
现有文本文件内容如下:
30,-4,098511E-02 30,05,-4,098511E-02 41,9,15,54288
需要移除每行的最后两个字段,处理后预期结果:
30 30,05 41,9
之前尝试的sed命令echo "30,-4,098511E-02" | sed 's/,.*/,/'无法得到正确结果,需要可行的解决方法。
可行解决方法
方法1:使用sed命令
通过匹配每行末尾的最后两个字段,将其替换为空即可:
sed 's/,[^,]*,[^,]*$//' your_file.txt
- 模式解释:
,[^,]*:匹配一个逗号后接任意数量的非逗号字符- 连续两个该模式加上
$(行尾),精准匹配每行的最后两个字段 - 替换为空后,自动保留前N-2个字段(N为该行总字段数)
方法2:使用awk命令
awk可以动态识别每行的字段数,打印前NF-2个字段(NF表示当前行的总字段数):
awk -F, '{ for(i=1; i<=NF-2; i++){ if(i>1) printf "," printf $i } print "" }' your_file.txt
- 逻辑说明:
- 以逗号
-F,作为字段分隔符 - 循环遍历前
NF-2个字段,字段间自动添加逗号分隔 - 最后打印换行符保证每行格式正确
- 以逗号
内容的提问来源于stack exchange,提问作者user979974
相关产品推荐
相关产品推荐

