Linux批处理命令获取从特定字符串开始的用户



我正在尝试使以" ab"开头的用户或以" 1"结尾。只有用户。以下命令与谁一起使用,但由于某种原因而不是用户。

users | grep -e "^ab" -e "1$" 

结果是我让系统的所有用户

users在A single 行上输出登录的用户。如果您想分别与grep匹配,请首先将输出从users分为单个行,通过用newline替换每个空间:

 users | tr ' ' 'n' | grep -e "^ab" -e "1$"

更新:另外,如果使用GREP的-o选项,则可以跳过tr步骤 word 边界(如果" ab"one_answers" 1"本身不应匹配,则将*替换为CC_7):

users | grep -o -e 'babw*' -e 'bw*1'

OSX 用户:令人难以置信的是,有时会跳过匹配 - 在10.9上使用输入字符串"ab 1 abc x1"在10.9上观察到;您可以通过将Regexes组合到单个中并使用egrepgrep -E或CC_11:<<<<p>。/p>

users | egrep -o 'b(abw*|w*1)'

users的输出在一行上一起运行。

who的输出分配,每行一条,有其他详细信息。

您对^$的使用仅与行的起点或结尾匹配。

  who | grep -e '^ab' -e '1$'

…说要匹配其名称以" ab"开头或终端登录的用户(或其他字段,取决于您的who版本,可能是时间)以1结束,由于登录终端是who中的最后一个字段。

要匹配who中的用户名,您可以cut输出到空间上的字段,然后使用第一个字段:

   who | cut -d ' ' -f 1 | grep -e '^ab' -e '1$'

要匹配users的输出,您不能使用行标记的开始和结尾^…$,但是可以使用b

测试" word Bornaries"
   users | grep -e 'bab' -e '1b'

如果您要以序列提取匹配名称:

   users | grep -o -e 'babw*b' -e 'bw*1b'

如果您需要提取用户列表(在空间上拆分)并测试每个用户,例如要执行一些操作,您可以使用read

    users | while read -d ' ' user
    do
        if echo $user | grep -q -e '^ab' -e '1$'
        then
            echo "you have a nice name" | write $user
        fi
    done

@mklement在评论中指出,Bash也有自己的内置正则匹配:

   users | while read -d ' ' user
   do
       if [[ $user =~ '^ab|1$' ]]
       then
            echo "this is a little nicer way to match, $user" | write $user
       fi
   done

相关内容

  • 没有找到相关文章

最新更新