【问题标题】:Cut lines of /etc/passwd of users of the same group剪切同组用户的/etc/passwd行
【发布时间】:2013-01-16 15:09:07
【问题描述】:

我想剪掉同组用户/etc/passwd的行。

如果我的组有 uid 1009 我想要这个组的/etc/passwd 的所有行

user1:x:1001:1009::/home/user1:/bin/bash
user2:x:1002:1009::/home/user2:/bin/bash
user3:x:1003:1009::/home/user3:/bin/bash

我尝试了cat /etc/passwd | grep 1009,但它不起作用,因为数字 1009 也可以是 uid 或其他数字。

【问题讨论】:

    标签: linux awk grep cut passwd


    【解决方案1】:

    使用awk 将第四个字段与使用字段分隔符: 所需的uid 进行比较

    $ awk -F: '$4==1009' /etc/passwd
    user1:x:1001:1009::/home/user1:/bin/bash
    user2:x:1002:1009::/home/user2:/bin/bash
    user3:x:1003:1009::/home/user3:/bin/bash
    

    【讨论】:

      【解决方案2】:
      cat /etc/passwd | egrep '([^:]+:){3}1009:'
      

      “三个很多(一些非冒号,然后是冒号),然后是 1009,然后是另一个冒号。”

      (您需要尾随冒号省略组 10090。)

      【讨论】:

      • 你为什么要连接 (cat) 输入文件,然后将结果传递给 grep 而不是直接在文件上运行 grep?
      • 确实看起来像UUOC ^^ (但可能有“可读性”的原因:我到目前为止阅读的最佳理由是有人指出它允许按照信息流读取命令,而不是在第一个命令的末尾有源(这里是文件)......)(这可能就是这么多 UUOC 的来源的原因。有时我也会这样做,就像没有考虑的时候一样效率似乎更“自然”,即使它创建子流程和管道和缓冲......)
      • @EdMorton:因为这就是 OP 表达他的问题的方式。但现在我想起来了,我同意 Olivier 的观点。
      • @OlivierDulac 如果您只想在命令的左侧而不是右侧指定文件名,您可以使用</etc/passwd egrep '([^:]+:){3}1009:',仍然不需要单独的命令和管道。就我个人而言,我仍然不会,因为它感觉不自然,但也许我刚刚习惯了先有命令。嘿,我刚刚意识到你的论点没有意义,因为你仍然有命令,但现在命令是 cat 而不是 egrep
      • 嗯,好点。无论如何,UUOC 结果链接之一指向 unix.org 帖子说在 some 情况下猫... | cmd 更快(通常当“cmd”从文件中读取数据的效率低于“cat”时)......但总的来说,我还是避免使用 UUOC(开销更少)^^
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2018-03-09
      • 2020-07-07
      • 1970-01-01
      • 2018-10-28
      相关资源
      最近更新 更多