【发布时间】:2020-07-20 23:00:58
【问题描述】:
我有一个大文本文件,其中包含以下行:
01 81118 9164.47 0/0:6,0:6:18:.:.:0,18,172:. 0/0:2,0:2:6:.:.:0,6,74:. 0/1:4,5:9:81:.:.:148,0,81:.
我需要的是只保留所有包含冒号的列的前三个字符,即
01 81118 9164.47 0/0 0/0 0/1
前 3 个字符之后的字符数可能会有所不同。我从删除冒号后的所有内容开始,但这会删除整个行的其余部分,而不是每个单词:sed 's/:.*//g' file.txt
另外,我一直在尝试引入单词边界 (\b) 并多次尝试删除冒号后的所有内容:
sed 's/\b:[^ ]//g' file.txt | sed 's/\b:[^ ]//g'
但这不是解决问题的好方法。最好的方法是什么?
【问题讨论】:
-
为什么不使用 awk 呢?
-
对 awk 也非常开放!只是想通过 sed 变得更好。