XPL*_*1ON 3 linux bash grep regex command-line
我正在尝试使用包含管道字符的正则表达式进行 grep |
。但是,它没有按预期工作。如下图所示,正则表达式与|
inclusively不匹配。
这是我的 bash 命令
cat data | grep "{{flag\|[a-z|A-Z\s]+}}"
样本数据如下
| 155||NA||{{flag|Central African Republic}}||2.693||NA||0.000||0.000||0.019||0.271||0.281||0.057||2.066
|{{flagicon|Kosovo}} ''[[Kosovo]]'' <ref name="KOS" group=Note>{{Kosovo-note}}</ref>
|{{flagicon|Somaliland}} [[Somaliland|Somaliland region]]
|{{flagicon|Palestine}} ''[[Palestinian Territories]]''{{refn|See the following on statehood criteria:
Run Code Online (Sandbox Code Playgroud)
预期的输出是
| 155||NA||{{flag|Central African Republic}}||2.693||NA||0.000||0.000||0.019||0.271||0.281||0.057||2.066
Run Code Online (Sandbox Code Playgroud)
但是,使用Regex101.com对其进行测试后,结果如预期。
似乎grep
接受\|
作为替代搜索表达式之间的分隔符(如|
in egrep
,其中\|
匹配文字|
)。
除此之外,你的表达还有其他问题:-
+
仅在egrep
(或grep -E
) 中受支持。\s
[]
字符组内不支持。|
在字符组中。所以以下适用于grep
:-
grep "{{flag|[a-zA-Z ][a-zA-Z ]*}}" <temp
Run Code Online (Sandbox Code Playgroud)
或者(感谢Glenn Jackman的意见):-
grep "{{flag|[a-zA-Z ]\+}}" <temp
Run Code Online (Sandbox Code Playgroud)
在egrep
该{}
字符有特殊的意义,所以他们需要进行转义: -
egrep "\{\{flag\|[a-zA-Z ]+\}\}" <temp
Run Code Online (Sandbox Code Playgroud)
请注意,我已经删除了不必要的cat
.
归档时间: |
|
查看次数: |
7408 次 |
最近记录: |