grep:包含多个特殊字符的过滤列表

时间:2015-07-16 19:19:56

标签: regex grep filtering

使用grep或其他命令行工具我需要过滤列表,以便排除包含以下一个或多个字符的每一行:

.
/
-
'
[space]

我在搜索多个问题时很难逃脱特殊字符。

这不起作用:

grep -v '(.|/|-|'| )' input > output

1 个答案:

答案 0 :(得分:1)

默认情况下,grep命令使用" Basic"正则表达式格式。你写的正则表达式是"扩展"格式。您可以告诉grep使用带有-E选项的扩展格式。

你的正则表达式中包含一个点。请记住,一个点匹配"任何"字符。要逃避其正常行为,您可以使用反斜杠(\.)或将其置于范围([.])中进行转义。我更喜欢后一种表示法,因为我发现反斜杠使得阅读起来更加困难。选择是你的。

你的表达中有一个引号。在您编写它之后,命令行无法工作,因为嵌入的单引号退出以第一个单引号开头的字符串。你可以用双引号括起你的正则表达式来解决这个问题。

你也不需要这个正则表达式的外括号。

所以......你可以用Basic表示法编写整个内容:

grep -v "[.]\|/\|-\|'\| " input > output

或者您可以用扩展表示法编写它:

grep -Ev "[.]|/|-|'| " input > output

或者,您可以将所有这些字符放入一个范围内,在Basic和Extended中以相同的方式编写:

grep -v "[./' -]" input > output

请注意,连字符已移至范围的END,因此不会被解释为"正斜杠和单引号之间的字符范围"。另请注意,由于此范围也与Basic RE表示法兼容,因此我删除了-E选项。

有关详细信息,请参阅man re_format(7)