Regex grep:筛选具有多个特殊字符的列表

Regex grep:筛选具有多个特殊字符的列表,regex,grep,filtering,Regex,Grep,Filtering,使用grep或其他命令行工具,我需要过滤列表,以便排除包含以下一个或多个字符的每一行: . / - ' [space] 在搜索多个支出时,我很难摆脱特殊角色 这不起作用: grep -v '(.|/|-|'| )' input > output 默认情况下,grep命令使用“基本”正则表达式格式。您编写的正则表达式是“扩展”格式。您可以告诉grep在-E选项中使用扩展格式 你的正则表达式中包含了一个点。请记住,点匹配“任意”字符。要逃避其正常行为,可以使用反斜杠(\.)或将其置于某个范

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

.
/
-
'
[space]
在搜索多个支出时,我很难摆脱特殊角色

这不起作用:

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

默认情况下,
grep
命令使用“基本”正则表达式格式。您编写的正则表达式是“扩展”格式。您可以告诉grep在
-E
选项中使用扩展格式

你的正则表达式中包含了一个点。请记住,点匹配“任意”字符。要逃避其正常行为,可以使用反斜杠(
\.
)或将其置于某个范围(
[.]
)来逃避。我更喜欢后一种表示法,因为我发现反斜杠使东西更难阅读。选择权在你

表达式中只有一个引号。正如您所写的,命令行将无法工作,因为嵌入的单引号将退出以第一个单引号开始的字符串。您可以通过将正则表达式用双引号括起来来解决这个问题

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

所以。。。你可以用基本符号来写整个过程:

grep -v "[.]\|/\|-\|'\| " input > output
grep -Ev "[.]|/|-|'| " input > output
或者你可以用扩展符号来写:

grep -v "[.]\|/\|-\|'\| " input > output
grep -Ev "[.]|/|-|'| " input > output
或者,您也可以将所有这些字符放入一个范围,该范围在Basic和Extended中的书写方式相同:

grep -v "[./' -]" input > output
请注意,连字符已移到范围的末尾,因此它不会被解释为“正斜杠和单引号之间的字符范围”。另外请注意,由于此范围也与基本RE表示法兼容,因此我删除了
-E
选项

有关详细信息,请参阅