Bash 需要删除字符串第三个冒号之后的所有数据

Bash 需要删除字符串第三个冒号之后的所有数据,bash,awk,sed,Bash,Awk,Sed,我有一个文件say test.txt,包含以下内容 apple:orange:mango:123:1234:12345 我希望删除第三个冒号之后的所有数据 预期产量 apple:orange:mango: Kinldy帮助使用反向引用: sed 's/\([^:]*:[^:]*:[^:]*:\).*/\1/' test.txt 或使用GNU sed: sed -E 's/(([^:]*:){3}).*/\1/' test.txt 使用grep:如果需要最后一个冒号 grep -oP '^

我有一个文件say test.txt,包含以下内容

apple:orange:mango:123:1234:12345
我希望删除第三个冒号之后的所有数据

预期产量

apple:orange:mango:
Kinldy帮助

使用反向引用:

sed 's/\([^:]*:[^:]*:[^:]*:\).*/\1/' test.txt
或使用GNU sed:

sed -E 's/(([^:]*:){3}).*/\1/' test.txt

使用
grep
:如果需要最后一个冒号

grep -oP '^.*?:.*?:.*?:' input
apple:orange:mango:
如果不需要最后一个冒号:

grep -oP '^.*?:.*?:[^:]+' input
apple:orange:mango

您可以使用
cut
执行此操作,例如
cut-d:-f1-3test.txt
。它显示第一、第二和第三列。如果需要其他范围的列,只需将
-f1-3
替换为所需的列即可


`

此网站不是编码服务。至少展示一下你的尝试。使用
awk-F:“{print$1:“$2:“$3:”}
甚至
awk'NF=3'FS=:OFS=:
虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答这个问题。提供这种额外的环境将大大提高其长期价值。请在回答中添加解释,包括适用的限制和假设。
echo apple:orange:mango:123:1234:12345| awk '{gsub(/[0-9]:*/,"")}1'
apple:orange:mango: