sed或awk可以使用NUL字符作为记录分隔符吗?

use*_*812 6 awk sed nul

我有一个NUL分隔输出来自以下命令:

some commands | grep -i -c -w -Z 'some regex'
Run Code Online (Sandbox Code Playgroud)

输出包含以下格式的记录:

[file name]\0[pattern count]\0
Run Code Online (Sandbox Code Playgroud)

我想使用文本操作工具(如sed/awk)将记录更改为以下格式:

[file name]:[pattern count]\0
Run Code Online (Sandbox Code Playgroud)

但似乎sed/awk通常只处理由"换行符"字符分隔的记录.我想知道如何使用sed/awk实现我的目的,或者如果sed/awk无法处理这种情况,我应该使用其他Linux工具.

谢谢你的任何建议.

劳伦斯

Tej*_*til 8

默认情况下,记录分隔符是换行符,将记录定义为单行文本。您可以通过更改内置变量RS来使用不同的字符。RS的值是一个字符串,表示如何分隔记录;默认值为\n,仅包含换行符的字符串。

 awk 'BEGIN { RS = "/" } ; { print $0 }' BBS-list
Run Code Online (Sandbox Code Playgroud)

  • 我已经测试了命令 `awk 'BEGIN { RS = "\0" } ; { print $0 }'` 可以使用 NUL 字符分隔记录。但是 [GNU Awk 用户指南](http://www.gnu.org/software/gawk/manual/html_node/Records.html) 说 **RS = "\0" 不可移植**。无论如何,我可以从这个命令开始尝试将 [模式计数] 之前的 NUL 字符更改为我的情况下的“:”字符。 (6认同)

Gra*_*eme 5

从版本4.2.2开始,GNU sed提供了-zor --null-data选项来执行此操作。例如:

sed -z 's/old/new' null_separated_infile
Run Code Online (Sandbox Code Playgroud)