grep 查找前面没有另一个字符串的字符串

grep 查找前面没有另一个字符串的字符串

我找到了很多关于忽略带注释的行或匹配一个字符串但不匹配另一个字符串的指南,但我还没有找到我需要的内容。我想递归地查找包含字符串“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

相关内容