Bash 文件开头的全局模式?

Bash 文件开头的全局模式?,bash,Bash,如何匹配行开头的全局模式? 例如,我有一个包含以下内容的文件 abcdef abcXXf XXcXXX XXXXXf aXcXXf 我想找出以X开头或第三个字符中有c的行 但是,gref{^x,^c}somefile.doc似乎不起作用。有什么想法吗?尝试使用多个-e选项拆分成多个模式 grep -e ^x -e ^..c somefile.doc 使用|表示“备选方案”: 编辑:转义的(和|在grep中并不特殊;您的模式将尝试按字面进行匹配。将您的模式与egrep、或grep-E、或使用g

如何匹配行开头的全局模式? 例如,我有一个包含以下内容的文件

abcdef
abcXXf
XXcXXX
XXXXXf
aXcXXf
我想找出以X开头或第三个字符中有c的行


但是,
gref{^x,^c}somefile.doc
似乎不起作用。有什么想法吗?

尝试使用多个-e选项拆分成多个模式

grep -e ^x -e ^..c somefile.doc

使用
|
表示“备选方案”:


编辑:转义的

(和|在grep中并不特殊;您的模式将尝试按字面进行匹配。将您的模式与
egrep
、或
grep-E
、或使用
grep'^\(x\|…c\)
。您正在混合正则表达式(“regex”,它是
grep
用来匹配文件内容的)、全局模式(shell使用它来查找匹配文件名的列表)和大括号扩展(shell使用它作为多个项的缩写)。特别是,当
grep
需要一个正则表达式时,您正试图混合使用大括号扩展和全局模式。顺便说一句,regex还有多种方言。您需要为将使用它的工具和上下文使用正确的模式语法。如果您的示例输入包含一些不符合要求的行d regexp,并且您提供了预期的输出,那么我们将有一个要测试的对象。现在,有人可以根据您的示例输入测试完全错误的regexp(例如,
grep.file
),并获得与正确的regexp相同的输出,因此这不是一个好的测试用例。
$ grep -E '^(X|.{2}c)' file
abcdef
abcXXf
XXcXXX
XXXXXf
aXcXXf
$ grep -E '^(X|.{2}c)' file
abcdef
abcXXf
XXcXXX
XXXXXf
aXcXXf