Bash 如何仅grep一行中的第一个字符串

Bash 如何仅grep一行中的第一个字符串,bash,shell,grep,Bash,Shell,Grep,我正在编写一个脚本,检查连接到服务器的所有用户的列表(使用who),并将只有字母a、b、c或d的用户的用户名列表写入文件信息。这就是我到目前为止所做的: who | grep '[a-d]' >> Information 但是,显示以下内容的命令: username pts/148 2019-01-29 16:09 (IP address) 我不明白的是为什么我的grep搜索还显示pts/148、日期、时间和IP地址。我只想让它发送用户名到文件信息 非常感谢您的帮助。

我正在编写一个脚本,检查连接到服务器的所有用户的列表(使用who),并将只有字母a、b、c或d的用户的用户名列表写入文件信息。这就是我到目前为止所做的:

 who | grep '[a-d]' >> Information
但是,显示以下内容的命令:

username pts/148      2019-01-29 16:09 (IP address)
我不明白的是为什么我的grep搜索还显示pts/148、日期、时间和IP地址。我只想让它发送用户名到文件信息


非常感谢您的帮助。

您需要获取第一个单词,否则
grep
将显示包含匹配文本的整行。您可以使用
awk

who | awk '{ if (substr($1,1,1) ~ /^[a-d]/ ) print $1 }' >>Information

您需要获取第一个单词,否则
grep
将显示包含匹配文本的整行。您可以使用
awk

who | awk '{ if (substr($1,1,1) ~ /^[a-d]/ ) print $1 }' >>Information
另一种方法是使用
cut
仅获取字符串的第一部分

who | cut -f 1 -d ' ' | grep '[a-d]' >> Information
另一种方法是使用
cut
仅获取字符串的第一部分

who | cut -f 1 -d ' ' | grep '[a-d]' >> Information

使用awk输出第一个束匹配的记录
[a-d]

$ who | awk '$1~/[a-d]/' >> Information
使用
grep
搜索第一个空格前有
[a-d]
的行:

$ who | grep -o "^[^ ]*[a-d][^ ]*" >> Information

使用awk输出第一个束匹配的记录
[a-d]

$ who | awk '$1~/[a-d]/' >> Information
使用
grep
搜索第一个空格前有
[a-d]
的行:

$ who | grep -o "^[^ ]*[a-d][^ ]*" >> Information

grep
显示匹配行。此行匹配。您在哪里告诉它只输出部分行,而不是整行?
grep
显示匹配行。此行匹配。您在哪里告诉它只输出行的一部分,而不是整行?