ユーザー名をgrepしようとしています:
users | grep "^\b\w*\b" -P
grep
との最初の一致のみを表示するにはどうすればよいですか?
本当に最初のWordだけを返したい場合、grep
を使用してこれを実行したい場合、grep
はたまたまGNU grep
、おそらく-o
オプションが必要です。-P
がなくてもこれを行うことができ、最初の\b
は実際には必要ないため、users | grep -o "^\w*\b"
を使用します。
しかし、@ manatworkが述べたように、Shellビルトインread
またはcut
/sed
/awk
がより適切であるように見えます(特に、あなたがもっと何かをする必要があるだろうポイント)。
grep
との最初の一致のみを表示するには、-m
パラメータを使用します。例:
grep -m1 pattern file
-m num
、--max-count=num
Numが一致したら、ファイルの読み取りを停止します。
それは私のために働きました。最初のマッチキャッチ:
users | grep -m 1 "^\b\w*\b"
そして最後の試合は
users | grep "^\b\w*\b" |tail -1
なぜgrep
? grep
コマンドは検索用です。 cut
またはawk
が必要なようですが、組み込みの読み取りも適しているようです。
それらを比較します。
users | cut -d' ' -f1
users | sed 's/\s.*//'
users | awk '$0=$1'
変数に保存したい場合は、bashを使用します。
read myVar blah < <(users)
または:
read myVar blah <<< $(users).
@ manatworkコメント に基づく上記の回答。