我在Windows中使用Gitbash。我想grep一组字符串,每个字符串以|
结尾我想我可以用反斜杠单独做每个人来逃避管道:
grep abcdef\| filename.tsv
但是要把它们全部放在一起我最终得到:
grep 'abcdef\|\|uvwxyz\|' filename.tsv
失败了。有什么想法吗?
我可以单独执行每个字符串,然后连接生成的文件,但这需要几天时间。
答案 0 :(得分:4)
ERE可能是最佳选择,以便于阅读。
egrep '(abcdef|uvwxyz)[|]' filename.tsv
这使您可以更轻松地管理字符串列表,并通过将尾随垂直条放在一个范围内来“转义”它。 (这也适用于圆点,星号等。)
如果系统上没有egrep
,您可以检查现有的grep是否包含-E
扩展正则表达式的选项。
答案 1 :(得分:2)
在基本的posix正则表达式中 - 由grep使用 - 你不能逃避文字|
。但是,如果将|
用作正则表达式语法元素来指定备选方案,则需要转义grep 'abcdef|\|uvwxyz|' filename.tsv
。
以下表达式应该有效:
<input name="name"
data-bind="name" -> typo maybe? no data-binding declaration like these
data-value-field="id" -> double init, you have it on your ComboBoxEditor function dataValueField: valuefield,
data-text-field="name" -> double init, you have it on your ComboBoxEditor function dataTextField: textfield,
data-role="combobox" />
答案 2 :(得分:2)
这里有两种竞争效果,您可能会感到困惑。首先,|
必须进行转义或引用,以便shell不解释它。其次,根据您使用的正则表达式模式,无论是文字字符还是元字符,转义/取消管道都会发生变化。
我建议您将模式更改为:
grep 'abcdef|\|uvwxyz|' file
在基本的正则表达式模式下,转义管道\|
是正则表达式OR,因此它匹配模式后跟文字管道。
或者,如果您的所有模式都以管道结尾并且您只有两个,那么您可以使用它:
grep -E '(abc|def|ghi)\|' file
在扩展模式下,转义管道会产生相反的效果,因此此模式匹配任何字母序列,后跟文字管道。