如何搜索整条线

时间:2013-09-26 08:43:07

标签: regex linux unix grep escaping

我的目的是确定配置文件中是否存在整行。 这是一个例子:

ports.conf:

#NameVirtualHost *:80
NameVirtualHost *:80

现在我想搜索NameVirtualHost *:80但不是#NameVirtualHost *:80

我对此的第一个想法当然是使用grep。像这样:

grep -F "NameVirtualHost *:80" ports.conf这给了我两行我想要的东西。 我的第二个想法是使用这样的正则表达式:grep -e "^NameVirtualHost \*:80" ports.conf。但显然现在我必须处理转义特殊字符行*

这可能不是什么大问题,但是我希望传递单个搜索字符串,并且在使用我的脚本时不想使用转义字符串。

所以我的问题是: 如何逃避特殊字符?如何使用不同的工具获得相同的结果?

3 个答案:

答案 0 :(得分:4)

grep有一个选项-x就是这样做的:

-x, --line-regexp
          Select only those matches that exactly match the whole line.  (-x is specified by POSIX.)

因此,如果您将第一个命令更改为grep -Fx "NameVirtualHost *:80" ports.conf,则可以获得所需内容。

答案 1 :(得分:1)

使用printf escaping

printf '%q' 'NameVirtualHost *:80'

一起

grep -e "^`printf '%q' 'NameVirtualHost *:80'`$" test

或者

reg="NameVirtualHost *:80"
grep -e "^`printf '%q' "$reg"`$" test

答案 2 :(得分:0)

我能想到保持正则表达式简单的最快方式是

grep -F "NameVirtualHost *:80" ports.conf | grep -v "^#\|^\/\/"