dr.*_*sen 77 grep regular-expression
我正在尝试使用带有正则表达式的 grep 来查找文件中与 2 个可能字符串中的 1 个匹配的行。这是我的grep:
$ grep "^ID.*(ETS|FBS)" my_file.txt
Run Code Online (Sandbox Code Playgroud)
上面的 grep 没有返回任何结果。但是,如果我执行:
$ grep "^ID.*ETS" my_file.txt
Run Code Online (Sandbox Code Playgroud)
或者
$ grep "^ID.*FBS" my_file.txt
Run Code Online (Sandbox Code Playgroud)
我确实匹配特定的行。为什么我的 OR 正则表达式不匹配?在此先感谢您的帮助!
roz*_*acz 111
使用普通的正则表达式,字符(,|和)需要转义。所以你应该使用
$ grep "^ID.*\(ETS\|FBS\)" my_file.txt
Run Code Online (Sandbox Code Playgroud)
使用扩展正则表达式( -E) 选项时不需要转义符。参见man grep“ Basic vs Extended Regular Expressions”部分。
Mic*_*jer 30
如果您想使用多个分支(|as or),那么为了更加兼容,最好明确说明您想使用“现代 RE” aka。ERE。
为此,请使用grep -E:
grep -E "^ID.*(ETS|FBS)" my_file.txt
Run Code Online (Sandbox Code Playgroud)
要了解有关 RE、ERE 和整个“现代”ER 故事的更多信息,请参阅man 7 regex。
或者,您可以使用egrep代替grep,但正如您可以从man grep以下内容中读取的那样:
egrep 与 grep -E 相同。fgrep 与 grep -F 相同
(……)
直接调用或者作为egrep的或fgrep一样被弃用
| 归档时间: |
|
| 查看次数: |
97419 次 |
| 最近记录: |