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

时间:2019-01-29 23:29:50

标签: bash shell grep

我正在编写一个脚本,该脚本检查连接到服务器的所有用户的列表(使用谁),并将仅字母a,b,c或d的用户名列表写入文件Information。这是我到目前为止的内容:

 who | grep '[a-d]' >> Information

但是,显示此命令的命令:

username pts/148      2019-01-29 16:09 (IP address)

我不明白的是为什么我的grep搜索还会显示pts / 148,日期,时间和IP地址。我只希望它将用户名发送到文件信息。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

另一种方法是使用command ... class EventServiceProvider extends ServiceProvider { /** * The event listener mappings for the application. * * @var array */ protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, /* add some notification here that sends you an email */ ], ]; ... 仅获取字符串的第一部分。

cut

答案 1 :(得分:1)

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

$ who | awk '$1~/[a-d]/' >> Information

使用grep搜索第一个空格前带有[a-d]的行:

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

答案 2 :(得分:0)

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

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