【发布时间】:2012-02-07 02:12:21
【问题描述】:
我有一个来自以下命令的 NUL 分隔输出:
some commands | grep -i -c -w -Z 'some regex'
输出由以下格式的记录组成:
[file name]\0[pattern count]\0
我想使用文本处理工具,例如 sed/awk,将记录更改为以下格式:
[file name]:[pattern count]\0
但似乎 sed/awk 通常只处理由“换行符”字符分隔的记录。我想知道如何使用 sed/awk 来实现我的目的,或者如果 sed/awk 无法处理这种情况,我应该使用什么其他 Linux 工具。
感谢您的任何建议。
劳伦斯
【问题讨论】:
-
那么您如何看待这个文件?用十六进制编辑器?它怎么知道在哪里“打破”界限?为什么不直接将 '\0' 转换为 '\n' 并拥有一个可以使用标准 unix 范例处理的易于阅读的文件呢?否则每走一步,你都将与 unix 的基本法则“各行其道”作斗争! ;-) 生命太短暂了,还有更多有趣的问题需要解决。你能得到输出的原始来源以使用 '\n' 或 ... 颤抖, '\r\n' 吗?祝你好运。
-
输出不被显示,它被传送到另一个命令。我使用 NUL 作为分隔符,因为 Linux 文件名中可能包含“换行符”字符。我同意生命太短暂了,我们无法为我们的问题找出所有解决方案。
-
但文件名是与管道中包含的数据不同的“数据”。 2 仅在将数据写入名称可能包含 '\n' 的文件时相遇。祝你好运。
-
我终于发现
grep -c -Z只会在[file name]之后放置一个NUL 字符,但会在[pattern count]之后放置一个“换行符”字符。我现在选择不使用grep -Z选项,但 TejasP 的回答仍然对我将来使用 awk 解析 NUL 分隔文件很有帮助。谢谢大家。