我确定我们大多数人都知道,当我们希望某些正则表达式与该行开头的字符串匹配时,必须使用“ ^” ...
但是,我试图理解真正的意思是“行首的空字符串”
我知道回声“ Hello World” | grep ^ H它匹配
因此,请查看以下命令的输出:
[sergio@localhost ~]$ dd if=/dev/zero of=/tmp/texto count=1 bs=1 2>/dev/null
[sergio@localhost ~]$ od -ta /tmp/texto
0000000 nul
0000001
到目前为止,一切都按预期进行,因此:
[sergio@localhost ~]$ echo "Hello" >> /tmp/texto
[sergio@localhost ~]$ grep -a "^Hello" /tmp/texto
好吧,我必须承认的第一件事没想到,在Hello之前有一个空字符,为什么它不匹配?
好的,让我们在perl样式中使用grep:
[sergio@localhost ~]$ grep -a -P "\x00Hello" /tmp/texto
Hello
好,它匹配
但是我不明白(也许我有一些误解)为什么grep -a“ ^ Hello”不匹配...
你可以帮帮我吗?
提前致谢!
您正在将空字符(二进制值0)与空字符串混淆。
“行首的空字符串”只是行首字符之前的不存在的内容(存在)。同样,在行末的空字符串是在行的最后一个字符之后发现的类似的非内容。空字符串可以被认为是由“空字符串,空字符串”组成,而具有某些内容的字符串可以被认为是“空字符串,Hello world,空字符串”。
C中的字符串表示为一系列非0字节,后跟一个或多个0字节,表示字符串终止,但这与正则表达式中的“空字符串”完全分开,实际上很大程度上是C中的内部选择编程语言和标准库。很少有其他语言可以这样做,但是即使这样也可以表示空字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句