当键/值是某些东西时,如何仅打印某些文本块?

问题描述 投票:0回答:2

因此,如果我有这样的事情,我只想在“帐户已禁用:False”时捕获或打印出帐户信息。

$ ipa user-find

---------------
2 users matched
---------------
  User login: jpeterson
  First name: john
  Last name: peterson
  Home directory: /home/jpeterson
  Login shell: /bin/sh
  UID: 855800007
  GID: 855800007
  Account disabled: False

  User login: jsmith
  First name: john
  Last name: smith
  Home directory: /home/jsmith
  Login shell: /bin/sh
  UID: 855800004
  GID: 855800004
  Account disabled: True
----------------------------
Number of entries returned 2
----------------------------

预期的输出将是:

  User login: jpeterson
  First name: john
  Last name: peterson
  Home directory: /home/jpeterson
  Login shell: /bin/sh
  UID: 855800007
  GID: 855800007
  Account disabled: False

有多个具有相同键或属性的帐户。

也许我不能为此使用数组,只是不确定。除了尝试mapfile之外,我还没有尝试任何其他方法。当键“ Account disabled”的值等于“ False”时,将文件放入数组并打印出元素。但是我还没有。

linux bash text-processing
2个回答
4
投票

我认为您正在对此进行倒退。 ipa应该有一种查询数据库的方法。我自己从未使用过它,但在以下示例中发现了a manpage

ipa user-find foo

搜索所有在uid,名字,姓氏,全名等中带有“ foo”的用户。具有uid为“ foobar”的用户将符合搜索条件。

ipa user-find foo --first bar

与前面的示例相同,除了这次用户的名字必须完全是“ bar”。 uid为“ foobar”且名字为“ bar”的用户将符合搜索条件。

要获取更多详细信息,请尝试ipa help user-find

您想要的命令可能看起来像其中之一:

ipa user-find --disabled False  # Update: this one worked for OP
ipa user-find --account-disabled False
ipa user-find --enabled True

也就是说,如果您想使用文本处理路线,请you could use awk


1
投票

这是一个简单的awk脚本:

script.awk

awk

正在运行:

length() == 1 || /^--*/ {  # if section boundery marker
    if (found == 1) print rec; # print current rec only on found marker
    found = 0; # reset found marker
    rec = ""; # reset rec
    next; # read next line
}
/Account disabled: True/ {found = 1;} # if on disabled account, set found marker
{rec = rec $0 ORS} # accumulate current line into rec

输出:

awk -f script.awk input.txt
© www.soinside.com 2019 - 2024. All rights reserved.