如何在Bash中找到以字母开头的行?grep和awk都不起作用
我一直在努力寻找以E开头的行,在空格后面也有大写字母a如何在Bash中找到以字母开头的行?grep和awk都不起作用,bash,awk,grep,etl,Bash,Awk,Grep,Etl,我一直在努力寻找以E开头的行,在空格后面也有大写字母a grep 'E* A' file.txt | grep '^E' 代码的第一部分可以工作(打印所有在空格后有A的行,虽然我不太明白如何工作,因为没有“E”它就不能工作),但是第二部分不行。我知道用sql很容易做到这一点,但我相信用纯bash也有办法做到这一点。grep没有逻辑AND运算符,除非将管道用作: grep ' A' file.txt | grep '^E' 在这种情况下,您可以将BRE设置为 grep '^E.* A' fil
grep 'E* A' file.txt | grep '^E'
代码的第一部分可以工作(打印所有在空格后有A的行,虽然我不太明白如何工作,因为没有“E”它就不能工作),但是第二部分不行。我知道用sql很容易做到这一点,但我相信用纯bash也有办法做到这一点。
grep
没有逻辑AND运算符,除非将管道用作:
grep ' A' file.txt | grep '^E'
在这种情况下,您可以将BRE设置为
grep '^E.* A' file.txt
或者您可能希望使用awk进行此类操作
awk '/^E/ && / A/' file.txt
根据你的问题,你可能也对
grep '^E.*\sA' file.txt
它匹配以E(^E)开头的行,然后是任何字符(.)零次或多次(*),然后是一个空格(\s),后面是a。为什么不
grep'^ea'file.txt
?也许你没有意识到E*
会找到不包含E的行(星号表示“前面的零行或多行”)。找到一行实际包含首字母E的代码,您的脚本应该可以运行,当然正如@WiktorStribiżew所指出的,使用单个正则表达式要好得多。这个问题也可以理解为匹配行,从E
开始,然后在右侧某处使用空格+a',然后'^E.*a'
应该可以运行。顺便说一句,你的grep
版本是什么?请提供缺少的。看看这是否还不清楚。@WiktorStribiżew不起作用,顺便说一句,这是我的第一选择。3.1谢谢!我漏掉了点!谢谢工作得很好\s
是一种PCRE扩展,传统上不受grep