我找到了很多关于忽略带注释的行或匹配一个字符串但不匹配另一个字符串的指南,但我还没有找到我需要的内容。我想递归地查找包含字符串“indexes”的文件(我认为不区分大小写,它是apacheconf),但前面不是“#”。
它应该与此匹配:
Options Indexes
Options +Indexes
Options Indexes MultiViews
Options Indexes # Comment
Options Indexes # Indexes
但不是这个:
Options MultiViews # Indexes
# Indexes yadayada Indexes
我在表单的脚本中使用它:
if grep -re "[^#]*ndexes" $DIR1/httpd.conf $DIR2/http; then
echo Do not use Indexes
fi
以上是我的努力之一,但我无法使其发挥作用。
答案1
鉴于此输入:
Options Indexes
Options +Indexes
Options Indexes MultiViews
Options Indexes # Comment
Options Indexes # Indexes
Options MultiViews # Indexes
# Indexes yadayada Indexes
这似乎有效:
$ grep '^[^#]*Indexes' input
Options Indexes
Options +Indexes
Options Indexes MultiViews
Options Indexes # Comment
Options Indexes # Indexes
$ grep -v '^[^#]*Indexes' input
Options MultiViews # Indexes
# Indexes yadayada Indexes
剖析正则表达式:
^
- 行的开头[^#]*
- 零个或多个非奥克托索普的任何角色Indexes
- 文字字符串Indexes
将其放在脚本的上下文中:
if grep -rl -- '^[^#]*Indexes' "$DIR1/httpd.conf" "$DIR2/http"; then
echo "The above-listed files use an 'Indexes' directive."
fi