【问题标题】:How to get extract words from differents lines in file and combine them to another file如何从文件中的不同行中提取单词并将它们组合到另一个文件中
【发布时间】:2022-10-23 07:55:12
【问题描述】:

如果我有文件或输出:

givenName: filip
gidNumber: 500
homeDirectory: /home/users/ffilip
sn: filip
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
userPassword:: MTIz

givenName: stiv
gidNumber: 500
homeDirectory: /home/users/stiv
sn: stiv
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
userPassword:: BhJk

我想得到:

givenName: filip, userPassword:: MTIz 

givenName: stiv, userPassword:: BhJk

【问题讨论】:

  • 这看起来像 ldap,您可以只使用 ldapsearch 查询,例如只查询您需要的东西。

标签: bash


【解决方案1】:

这将起作用: 假设您在文件中有output

cat output| egrep "givenName:|userPassword::"|paste -d ", "  - -

或者

ldap command|egrep "givenName:|userPassword::"|paste -d ", "  - -

或将comma 与额外的space 分开,您可以使用:

ldap command|egrep "givenName:|userPassword::"|paste -d ", "  - -|sed 's/,/, /g'

当然,您也可以使用awk 完成此操作:

a bit modified to use a delimiter with only 1 space:
ldap command|awk '$1=="givenName:" {printf "%s", $0} $1=="userPassword::" {print ",", $0}'

或 Perl 的正则表达式功能......正如其他答案所暗示的那样。

【讨论】:

  • 我假设paste 不支持多个字符的分隔符。
  • 好吧,您可以将|sed 's/,/, /g' 附加到命令中.. 来完成
【解决方案2】:

另一种选择是awk。只需匹配第一个字段并在其为"givenName:" 时输出不带换行符的记录,然后连接", " 并输出带有换行符的"userPassword::" 记录,例如

awk '$1=="givenName:" {printf "%s", $0} $1=="userPassword::" {print ", ", $0}' file

示例使用/输出

使用名为 output 的文件中的输出,您将拥有:

$ awk '$1=="givenName:" {printf "%s", $0} $1=="userPassword::" {print ", ", $0}' output
givenName: filip,  userPassword:: MTIz
givenName: stiv,  userPassword:: BhJk

(如果你想在行之间有一个空格,你可以在userPassword:: 之后或givenName: 之前输出一个额外的换行符。你可以设置一个标志来防止在第一条记录之前添加一个换行符。由你决定)

【讨论】:

    【解决方案3】:

    一个sed单线:

    sed -n '/^givenName:/h;/^userPassword:/{H;g;s/
    /, /p;}' file
    

    【讨论】:

      【解决方案4】:

      使用 GNU ed(1)。

      printf '%s
      ' 'v/^givenName:|^userPassword::/d' 'g/.{1,}/;+1j' ,p Q | ed -s file.txt
      

      【讨论】:

        猜你喜欢
        • 2020-10-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2020-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多