【问题标题】:I need a grep command that will pull the usernames only from the /etc/passwd file in linux我需要一个 grep 命令,它只会从 linux 中的 /etc/passwd 文件中提取用户名
【发布时间】:2014-01-15 17:32:36
【问题描述】:

我需要一个 grep 或其他类似的命令,它只会从 linux 的 /etc/passwd 文件中提取用户名。冒号之前的任何东西。我知道这是与 reg ex 一起做的,但是我的经验还不够...
以下命令将提供所有 ACTUAL 用户,我需要一种管道到 grep 或另一行代码以仅显示用户名部分的方法。

awk -v LIMIT=500 -F: '{print $1}' '($3>=LIMIT) && ($3!=65534)' /etc/passwd

【问题讨论】:

  • 发布一些示例输入和预期输出。
  • 您那里的代码看起来会打印您 passwd 文件中的每个用户名(并另外打印符合您条件的每一行的全部内容)。我想你想颠倒你的 {}() 块的顺序。

标签: linux bash awk grep


【解决方案1】:

应该这样做:

awk -F: '$3>=LIMIT && $3!=65534 {print $1}' LIMIT=500 /etc/passwd 

【讨论】:

    【解决方案2】:

    要在最简单的 bash 中执行此操作:

    limit=500
    nfsnobody_id=65534
    cut -d: -f1,3 /etc/passwd | while IFS=: read username uid; do
        (( uid >= limit && uid != nfsnobody_id )) && echo $username
    done
    

    改掉使用 VARNAMES_IN_CAPS 的习惯:有一天你会写 PATH=$(dirname $FILE) 然后想知道为什么找不到命令。

    【讨论】:

      【解决方案3】:

      您只需稍微重写 awk 命令的过滤器部分。例如,以下应该可以工作:

      awk -v LIMIT=500 -F: '{if (($3>=LIMIT) && ($3!=65534)) print $1}' /etc/passwd
      

      否则,要严格回答你的问题,如果你想使用 grep,命令将是

         ... | grep -o "^[^:]*" 
      

      但那不是要走的路。

      【讨论】:

        猜你喜欢
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多