使用grep查找包含字符串的行,但不能以另一个字符串开头

时间:2018-01-05 14:57:12

标签: regex grep

我在PHP .ini设置文件中查找会话配置标记。

我使用此命令查找它们:

 grep -i "session" php.ini

但是它返回注释并注释掉以分号开头的参数&#34 ;;"。

如何更改命令,以便我仍然可以使用" session"但是不是以分号开头的那些?

3 个答案:

答案 0 :(得分:2)

grep -i "session" php.ini | grep -vx ';.*'

应该工作

-v是'反转匹配',因此只显示不匹配的行

-x是整线匹配

答案 1 :(得分:2)

尝试一下:

grep -i '^session\|^[^;].*session' php.ini

答案 2 :(得分:1)

假设:

$ cat file
session
session ; trailing comment
; commented line
      session
; session
bad session
sessions

你可以grep会话中没有被赞扬过的行如下:

$ grep '^[^;]*session' file
session
session ; trailing comment
      session
bad session
sessions

如果您想删除包含尾随注释的会话的行:

$ grep '^[^;]*session[^;]*$' file
session
      session
bad session
sessions

如果您希望会话成为第一个单词,而不是仅仅出现在该行中:

$ grep '^[[:space:]]*session' file
session
session ; trailing comment
      session
sessions

如果您只想要会话与子字符串匹配:

$ grep '^[[:space:]]*session\>' file
session
session ; trailing comment
      session

(GNU or BSD Grep only that last one...)