我正在浏览一些文件,查找字符串'host'(带单引号)。我想捕获没有注释(#)的字符串的文件。
第一个示例中的测试用例工作正常,但下面的第二个案例没有。第二种情况是我创建的测试文件,并插入了前导空格。所以我知道没有控制字符,只有空格。
这两个服务器都是Linux的最新版本。
第二个例子没有捕获文本的原因是什么?我知道我可以选择主机,然后使用 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 ~]$
答案 0 :(得分:0)
根据grep
版本和类型,\s
可能无效。在我的使用grep 2.12的系统上,没有提到\s
,尽管它确实有效。其他版本可能没有启用此功能。
从手册页:
The Backslash Character and Special Expressions
The symbols \< and \> respectively match the empty string at the
beginning and end of a word. The symbol \b matches the empty string at
the edge of a word, and \B matches the empty string provided it's not
at the edge of a word. The symbol \w is a synonym for [_[:alnum:]] and
\W is a synonym for [^_[:alnum:]].
此外,man grep | grep "\\\\s"
根本不返回任何内容。就是这样:没有提到\s
。
相反,您可以使用[:space:]
:
user@pc $ grep -E "^[[:space:]]+'host'" set.txt
'host'
请检查您的grep版本,并查看适用于所有版本的语法。 This mailing list post说\s
在grep 2.5.1中不起作用,但在2.6.3中有效,所以你有一个2.6.3之前的版本,它可能不适用于\s