我想查找具有特殊模式的文件行,并将其打印在另一个文件中。 例如:
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中的错误消息,我想找到它们的列表。
答案 0 :(得分:1)
您可以使用:
awk -F"[()]" '{for (i=3;i<=NF;i+=2) printf "%s ",$i;print ""}' file
4 h
6
d
它不适用于您的真实数据
答案 1 :(得分: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