web-dev-qa-db-ja.com

コロンの前にコンテンツを取得する

Linuxにテキストファイルがあり、内容は次のようになっています。

help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com

以下のようにコロンの前の内容を取得したい:

help.helloworld.com
dev.helloworld.com

どうすればターミナル内でそれを行うことができますか?

8
Gabrial Johnas

これが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

区切り文字を:-d:で設定し、最初のフィールド(-f1)のみを印刷するように指示するだけです。

35
terdon

または代替:

$ grep -o '^[^:]*' file
help.helloworld.com
dev.helloworld.com

これは、各行の先頭(^)コロンなし([^:]*)。

19
Freddy

間違いなくawkをお勧めします:

awk -F ':' '{print $1}' file

:をフィールド区切り文字として使用し、最初のフィールドを印刷します。

18
Centimane

更新された答え

次のファイルを考慮してくださいfile.txt

help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
no.colon.com
colon.at.the.end.com:

sedを使用して、コロンの後のすべてを削除できます。

sed -e 's/:.*//' file.txt

これは、コメントで指摘されたすべてのコーナーケースで機能します。コロンで終了する場合、またはコロンがない場合ですが、質問自体では言及されていません。コメントを提供してくれた@Rakesh Sharma、@ mirabilos、@ Freddyに感謝します。質問に答えることは学ぶための素晴らしい方法です。

5
Randy Josleyn

GNU grepが必要です。macOSや他のBSDなどのデフォルトのgrepでは動作しません。

このような意味ですか:

grep -oP '.*(?=:)' file

出力:

help.helloworld.com
dev.helloworld.com
4