【问题标题】:Find lines of file with multi patterns查找具有多种模式的文件行
【发布时间】:2014-06-16 20:33:17
【问题描述】:

我想查找文件中具有特殊模式的行并将它们打印到另一个文件中。 例如:

a(code(4),message(h),b)

x(code(6),6)

v(message(d),b)

我想要下面的输出:

4 h

6

d

这意味着如果代码和消息部分存在,则打印它们的值,如果其中一个存在,则只打印那个

编辑: 我有这样的行:

ereport(ERROR,(errmsg("database hash table corrupted during cleanup --- abort")));

ereport(FATAL,(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),errmsg("data directory \"%s\" has wrong ownership",DataDir),errhint("The server must be started by the user that owns the data directory.")));

我需要以下输出:

database hash table corrupted during cleanup --- abort

ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE[tab]data directory \"%s\" has wrong ownership[tab]The server must be started by the user that owns the data directory.

这些是 PostgreSQL 中的错误消息,我想找到它们的列表。

【问题讨论】:

  • 告诉我们您的尝试以及失败的原因,我们会提供帮助。
  • 这并没有说明您为解决问题所做的任何事情。不管怎样,你已经得到了答案

标签: regex bash awk sed pattern-matching


【解决方案1】:

对于上面的示例,此代码将根据需要提取数据:

for i in `cat data.txt`
do
    echo $i | grep -E 'message|code' | sed 's/^.(//' | sed 's/code(//' | sed 's/,[a-z])//' | sed 's/,message(//' | cut -d, -f1 | sed 's/)/ /' | sed 's/)//' | sed 's/message(//'
done

【讨论】:

    【解决方案2】:

    你可以用这个:

    awk -F"[()]" '{for (i=3;i<=NF;i+=2) printf "%s ",$i;print ""}' file
    4 h
    6
    d
    

    它不适用于您的真实数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 2023-01-31
      • 2014-10-06
      • 2011-12-26
      相关资源
      最近更新 更多