sed 分隔符打印_sed或awk可以使用NUL字符作为记录分隔符吗?
我有一个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只会在[pattern count]之后放置一个"换行"字符。我现在选择不使用grep -Z选项,但是TejasPs的答案对于以后使用awk解析NUL分隔文件仍然很有帮助。谢谢大家
从版本4.2.2开始,GNU sed具有-z或--null-data选项来执行此操作。例如:
sed -z 's/old/new' null_separated_infile
默认情况下,记录分隔符是换行符,将一条记录定义为一行文本。您可以通过更改内置变量RS使用其他字符。 RS的值是一个字符串,说明如何分隔记录;默认值为" n",该字符串仅包含换行符。
awk 'BEGIN { RS ="/" } ; { print $0 }' BBS-list
我已经测试过命令awk BEGIN { RS ="\0" } ; { print $0 }可以用NUL字符分隔记录。 但是GNU Awk用户指南说RS =" 0"是不可移植的。 无论如何,在我的情况下,我可以从此命令开始尝试将[pattern count]之前的NUL字符更改为":"字符。
是的,gawk可以做到,将记录分隔符设置为\0。例如命令
gawk 'BEGIN { RS="\0"; FS="=" } $1=="LD_PRELOAD" { print $2 }'
将打印出LD_PRELOAD变量的值:
/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
/proc/$PID/environ文件是由NUL分隔的环境变量列表。我以它为例,因为在Linux系统上尝试很容易。
BEGIN部分将记录分隔符设置为\0,字段分隔符设置为=,因为我也想基于=之前的部分提取=之后的部分。
如果第一个字段具有我感兴趣的键,则$1=="LD_PRELOAD"将运行该块。
print $2块在=之后打印出字符串。
但是mawk无法解析用NUL分隔的输入文件。这记录在man mawk中:
BUGS
mawk cannot handle ascii NUL \0 in the source or data files.
mawk将停止读取第一个\0字符之后的输入。
您还可以使用xargs来处理NUL分隔的输入,这有点不直观,就像这样:
xargs -0 -n1
xargs使用echo作为默认命令。
-0将输入设置为NUL分隔。
-n1将echo的max参数设置为1,这样输出将由换行符分隔。
正如Graeme的答案所示,sed也可以做到这一点。
使用sed删除null字符-
sed 's/\x0/ /g' infile > outfile
或通过做文件内替换(这将备份原始文件并用替换覆盖原始文件)。
sed -i.bak 's/\x0/ /g' infile
使用tr:
tr -d"\000" < infile > outfile
或tr"\000""
" < infile > output:-?)
@shellter你是对的。 我不确定OP是否要用换行符替换它们或删除它们... :)
但是我的目的是仅替换[pattern count]之前的NUL字符,而不是替换所有NUL字符。
@ user1129812在这种情况下,您可以使用sed命令并从中删除g选项。 g选项用于进行全局替换。 删除后,只会在每行的第一次出现时进行更改。
sed 分隔符打印_sed或awk可以使用NUL字符作为记录分隔符吗?相关推荐
- sed 分隔符打印_字符截取:cut,格式化输出:printf,字符截取:awk,文件或命令输出编辑:sed...
cut 选项 文件名 -f 列号 提取第几列 -d 分隔符 指定分隔符把行分成多列 不能以空格为分隔符. [root@localhost ~]# cattestfile no. name sex sc ...
- sed 分隔符打印_关于正则表达式:使用sed更改CSV分隔符
我有一个CSV文件,看起来像: 1,3,"3,5",4,"5,5" 现在,我想将所有","(而不是引号)更改为";" 加 ...
- awk -f 分隔符 命令_千面 awk
awk 命令不仅提供了简单的输入字符串筛选功能,还包含提取数据列.打印简单文本.筛选内容--甚至做一些数学计算. -- Sandra Henry-stocker(作者)awk 命令不仅提供了简单的输入 ...
- Linux 替换字符 换行,sed将换行替换成空格或者其他字符linux操作系统 -电脑资料...
昨天有一同学问我如何利用shell的sed将换行替换成空格或者其他字符呢,下面小编来给大家介绍一下常用替换方法吧, sed流编辑器是shell中处理文本内容的一大利器.sed命令从文本流中读取一行文本 ...
- Java黑皮书课后题第6章:6.12(显示字符)使用下面的方法头,编写一个打印字符的方法。编写一个测试程序、打印从‘1‘到‘Z‘的字符,每行打印10个,字符之间使用一个空格字符隔开
6.12(显示字符)使用下面的方法头,编写一个打印字符的方法.编写一个测试程序.打印从'1'到'Z'的字符,每行打印10个,字符之间使用一个空格字符隔开 题目 题目描述 破题 补充:从生成随机字符窥探 ...
- oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...
就个人而言,我会使用CHR()来识别零值. nul是ASCII 0, CHR()将返回您传入的数字的字符表示. SQL> with the_data as ( 2 select 'a' || c ...
- java nul 字符_Java字符串替换和NUL(NULL,ASCII 0)字符?
用空字符替换字符中的字符甚至在Java中工作吗?我知道'\ 0'会终止一个c字符串. 这取决于你如何定义工作.是否用'\0'替换了所有出现的目标字符?绝对! String s = "food ...
- html保存时出现nul,c# – 有时保存的文件只包含NUL字符
我们的 Windows 8.1应用程序(WinRT)中存在一个问题,即有时我们保存的文件已损坏.这些文件的文件大小正确,但该文件只包含NUL字符.该文件应包含一个序列化对象作为XML. 为了找到问题, ...
- Java 程序处理 去除文件中的NUL字符
小编上次文件丢失电脑硬盘分区删了格式化了文件如何恢复,硬盘数据恢复后,找回的文件最后一行有NUL字符,想着怎么去掉,因为文件很多,就写了个java处理程序,处理掉NUL部分主要参考java删除文本文件 ...
最新文章
- java activiti5_工作流Activiti5.13学习笔记(一)
- solidworks工具集_【第1975期】SolidWorks!从3D扫描到3D打印的一站式设计工具
- 深入理解JVM(5) : Java垃圾收集器
- python简单可视化聊天界面_如何用Python制作可视化输入界面
- 理解js中的原型链,prototype与__proto__的关系
- quartus状态机生成_生成器作为(快速失败)状态机
- ArrayList 一个面试题
- 低学历的人就不能创业了吗?
- 微软补丁星期二修复120个漏洞,含2个已遭利用的 0day
- php 什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?
- JAVA中三个点“...”是什么意思
- Linux下抓取log的方法
- libxml2.7.8 c++ 解析xml文件 中文转换
- 愿以三生烟火,换君一世迷离
- nmap下载及安装过程。
- kettle怎么复制资源库的job_kettle插件更新:定时执行资源库及文件的ktr和kjb作业...
- 学习python第十五天,面对对象
- 跟着猴博士复试概率论(第二部分)
- 冲激函数与冲激函数相乘与冲激函数对冲激函数卷积之间的区别
- 高等数学学习笔记——第六十四讲——偏导数