Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 与Grep不一致的结果_Regex_Grep - Fatal编程技术网

Regex 与Grep不一致的结果

Regex 与Grep不一致的结果,regex,grep,Regex,Grep,我正在浏览一些文件,查找字符串“host”(带单引号)。我想捕获包含字符串而不带注释(#)的文件 第一个例子中的测试用例工作得很好,但下面的第二个例子却不行。第二个案例是我创建的一个测试文件,并在其中插入了前导空格。所以我知道没有控制字符,只有空格 这两台服务器都是Linux的最新版本 第二个例子没有捕获文本的原因是什么?我知道我可以只为主机进行grep,然后用grep-v对评论进行过滤,但我不明白这一点,这让我很恼火 /home/user2> $ cat set.txt 'host

我正在浏览一些文件,查找字符串“host”(带单引号)。我想捕获包含字符串而不带注释(#)的文件

第一个例子中的测试用例工作得很好,但下面的第二个例子却不行。第二个案例是我创建的一个测试文件,并在其中插入了前导空格。所以我知道没有控制字符,只有空格

这两台服务器都是Linux的最新版本

第二个例子没有捕获文本的原因是什么?我知道我可以只为主机进行grep,然后用grep-v对评论进行过滤,但我不明白这一点,这让我很恼火

/home/user2> $ cat set.txt
   'host'
/home/user2> $ grep -E "^\s+'host'" set.txt
   'host'
另一台Linux服务器上的Grep未捕获所需数据:

[user1@wweb1 ~]$ cat set.txt
     'host'  
[user1@wweb1 ~]$ grep -E "^\s+'host'" set.txt
[user1@wweb1 ~]$

根据
grep
版本和类型,
\s
可能不起作用。在我使用grep2.12的系统上,没有提到
\s
,尽管它确实可以工作。其他版本可能未启用此功能

从手册页:

反斜杠字符和特殊表达式
符号\<和\>分别匹配
一个词的开头和结尾。符号\b与处的空字符串匹配
单词的边缘,并且\B与空字符串匹配,前提是它不是
在一个词的边缘。符号\w是[[:alnum:]和的同义词
\W是[^[:alnum:][]的同义词。
此外,
mangrep | grep“\\\\s”
完全不返回任何内容。就是这样:没有提到
\s

相反,您可以使用
[:space:][/code>,如下所示:

 user@pc $ grep -E "^[[:space:]]+'host'" set.txt
     'host'

因此,请检查您的grep版本,并查找适用于所有版本的语法。说
\s
在grep2.5.1中不起作用,但在2.6.3中起作用,所以如果你有一个2.6.3之前的版本,它可能不适用于
\s

可能命令在不同的grep风格上有别名?你能检查一下吗?好问题。我运行了“set”和“env”,但没有任何内容出现别名。
grep-V
为这两个grep命令报告相同的版本?我可以确认grep 2.5.1不起作用:
echo'123'| grep-E'^\s+123'
没有给出匹配项,但是
echo'123'| grep-E'^\s\s*123'
匹配项。因此,它似乎更像是一个“+”问题,而不是“\s”问题。六羟甲基三聚氰胺六甲醚。。。我的grep手册页还说
\w
[[:alnum:]
的同义词,
\w
[^[:alnum:]
的同义词,这是错误的。grep的版本是FreeBSD 11.4上的
grep(GNU-grep)2.5.1-FreeBSD