1

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

端口.conf:

#NameVirtualHost *:80
NameVirtualHost *:80

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

当然,我首先想到的是使用 grep。像这样:

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

这可能没什么大不了的,但我想传入单独的搜索字符串,并且不想在使用脚本时为转义字符串而烦恼。

所以我的问题是: 如何转义特殊字符?或者我怎样才能用不同的工具达到同样的效果?

4

3 回答 3

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,您将得到您想要的。

于 2013-09-26T08:51:04.070 回答
1

使用 printf 转义

printf '%q' 'NameVirtualHost *:80'

全部一起

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

或者

reg="NameVirtualHost *:80"
grep -e "^`printf '%q' "$reg"`$" test
于 2013-09-26T09:00:38.040 回答
0

我能想到的让你的正则表达式简单的最快方法是

grep -F "NameVirtualHost *:80" ports.conf | grep -v "^#\|^\/\/"
于 2013-09-26T08:52:44.140 回答