获取冒号前的内容

Joe*_*eep 9 grep text-processing

我在 Linux 上有一个文本文件,其内容如下所示:

help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
Run Code Online (Sandbox Code Playgroud)

我想获取冒号前的内容,如下所示:

help.helloworld.com
dev.helloworld.com
Run Code Online (Sandbox Code Playgroud)

我怎样才能在终端内做到这一点?

ter*_*don 37

cut是为了:

$ cat file
help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
foo:baz:bar
foo

$ cut -d: -f1 file
help.helloworld.com
dev.helloworld.com
foo
foo
Run Code Online (Sandbox Code Playgroud)

您只需将分隔符设置为:with-d:并告诉它只打印第一个字段 ( -f1)。


Fre*_*ddy 19

或者替代方案:

$ grep -o '^[^:]*' file
help.helloworld.com
dev.helloworld.com
Run Code Online (Sandbox Code Playgroud)

这将返回从每行开头 ( ^)开始的任何没有冒号 ( [^:]*) 的字符。


Cen*_*ane 18

肯定会推荐awk

awk -F ':' '{print $1}' file
Run Code Online (Sandbox Code Playgroud)

用途:作为一个字段分隔符,并打印第一个字段。


Ran*_*eyn 5

更新的答案

考虑以下文件file.txt

help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
no.colon.com
colon.at.the.end.com:
Run Code Online (Sandbox Code Playgroud)

您可以使用sed删除冒号后的所有内容:

help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
no.colon.com
colon.at.the.end.com:
Run Code Online (Sandbox Code Playgroud)

这适用于评论中指出的所有极端情况——如果它以冒号结尾,或者如果没有冒号,尽管问题本身没有提到这些。感谢 @Rakesh Sharma、@mirabilos 和 @Freddy 的评论。回答问题是一种很好的学习方式。

  • `sed -e 's/:.*//' file.txt` 是 Posix sed 的另一种方式。 (4认同)