web-dev-qa-db-ja.com

grepで最初の一致のみを印刷する方法

ユーザー名をgrepしようとしています:

users | grep "^\b\w*\b" -P

grepとの最初の一致のみを表示するにはどうすればよいですか?

11
Yurij73

本当に最初のWordだけを返したい場合、grepを使用してこれを実行したい場合、grepはたまたまGNU grep、おそらく-oオプションが必要です。-Pがなくてもこれを行うことができ、最初の\bは実際には必要ないため、users | grep -o "^\w*\b"を使用します。

しかし、@ manatworkが述べたように、Shellビルトインreadまたはcut/sed/awkがより適切であるように見えます(特に、あなたがもっと何かをする必要があるだろうポイント)。

8
peterph

grepとの最初の一致のみを表示するには、-mパラメータを使用します。例:

grep -m1 pattern file

-m num--max-count=num

Numが一致したら、ファイルの読み取りを停止します。

32
kenorb

それは私のために働きました。最初のマッチキャッチ:

users | grep -m 1 "^\b\w*\b"

そして最後の試合は

users | grep "^\b\w*\b" |tail -1
1
foad322

なぜgrepgrepコマンドは検索用です。 cutまたはawkが必要なようですが、組み込みの読み取りも適しているようです。

それらを比較します。

users | cut -d' ' -f1
users | sed 's/\s.*//'
users | awk '$0=$1'

変数に保存したい場合は、bashを使用します。

read myVar blah < <(users)

または:

read myVar blah <<< $(users). 

@ manatworkコメント に基づく上記の回答。

0
kenorb