Windows创建的txt文件上的grep与Mac上的字符串不匹配-为什么?

斯里达·萨诺巴特

一位同事创建了一个构建树(通过gradle :dependencies > dependencies.txt)并将其通过电子邮件发送给我。我摸索了一个我想知道版本的库,所以我执行了:

grep log4j dependencies.txt

但是匹配为零,我的shell刚打印了一个新提示。由于文件很长而且我信任grep,所以没有打开它并进行检查。然后,经过反复的讨论,我被告知该文件是在Windows计算机上创建的。即使这样,我还是对grep无法正常工作感到惊讶-搜索字符串没有被换行符打断。但是执行后:

dos2unix dependencies.txt

Grep开始显示我想要的比赛。

显然,我对grep的工作方式的理解是错误的。当搜索词出现而中间没有换行符时,为什么grep在不同操作系统上对文件内容的行为方式不一样?

进一步的信息

  • file dependencies.txt 退货 dependencies.txt: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
  • LC_ALL=C grep log4j dependencies.txt 什么都不返回
  • grep o dependencies.txt 回来 Binary file depdencies.txt matches
  • grep --text dependencies.txt 什么也没返回
伊尔卡楚

UTF-16文本由16位组成,因此每个字母至少存储在两个字节中。如果只是ASCII字符,则其他所有字节均为零字节(NUL字节\0,而不是字符零)。您的Mac很可能无法对其进行设置。

特别是,NUL字节在C中被当作字符串终止符,因此许多工具可能根本无法处理它们。即使他们可以与他们打交道,他们也可能会将每个NUL当作一个不同的字符,因此您需要类似l.o.g.4.j该字符串的内容。

但是有趣的是,在打印时看不到NUL字节,因此,如果要将cat文件例如发送到终端,则看起来可能很正常。

NUL也是grep认为文件二进制的原因。

另请参阅:是什么使grep认为文件是二进制文件?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

这些字符串为什么不匹配?

sed字符串不匹配。为什么?

为什么此字符串与模式不匹配

为什么比较匹配的字符串比比较不匹配的字符串更快?

为什么Mac上的dotnet不能创建.csproj文件?

为什么字符串文字上的decltype不产生数组类型?

为什么在字符串对象上出现属性错误?

为什么在输出屏幕上不显示字符串

为什么*与+不匹配?

为什么不匹配

为什么不匹配?

为什么此脚本在Windows上创建损坏的PNG文件?

为什么在打印或书写时更改多行字符串?(Windows上的Python 3.6)

打印异常的输出是什么,为什么不匹配输出的字符串

为什么grep与“ \ <\-v \>”不匹配

为什么grep显示不匹配的行?

Bash:为什么不匹配时不返回空字符串

为什么JavaScript字符串空白字符&nbsp; 不匹配?

为什么在字符串类型上未定义字符串函数?

为什么grep无法在bash中的字符串“ -n”和“ -e”上进行匹配?

为什么在Mac上对我的文件进行base64编码不能产生正确的base64字符串?

当grep与字符串不匹配时,返回什么退出代码整数grep?

为什么“关闭”和“打开”与图表上的价格不匹配?

从stdin读取用户输入时,为什么我的字符串不匹配?

为什么以下indexOf与给定的子字符串不匹配?

为什么List.contain不匹配子字符串?

为什么以下正则表达式与字符串不匹配?

为什么正则表达式不匹配这个字符串

为什么正则表达式^([0 | 1] 1)+ $不匹配字符串“ 111”?