Bash 巴什格雷普在第一场比赛中停了下来
然而,由于“.com”偶尔在该行的末尾,我还是以某种方式返回了整行 我的示例输出应该如下所示:Bash 巴什格雷普在第一场比赛中停了下来,bash,Bash,然而,由于“.com”偶尔在该行的末尾,我还是以某种方式返回了整行 我的示例输出应该如下所示: cat file | grep -o 'user.*?com' grep -Po 'user.*?com' file 这怎么可能呢?非常感谢您的帮助这应该可以: user9@totl.example.com user11@shoe-bags.example.com user23@stellar-patrol.example.com ... etc 注意,这里我不需要猫 这将使用字符类[:空格:。
cat file | grep -o 'user.*?com'
grep -Po 'user.*?com' file
这怎么可能呢?非常感谢您的帮助这应该可以:
user9@totl.example.com
user11@shoe-bags.example.com
user23@stellar-patrol.example.com
... etc
注意,这里我不需要猫
这将使用字符类[:空格:
。我想说的是,我想要所有以user
开头、以.com
结尾、中间只包含非空格字符(并且至少包含一个)的字符([^[:space:]\+
)
关于您的解决方案:您需要
-p
开关,用于grep
使用Perl的regexp,以便*?
被解释为匹配任何内容,不贪婪:
会有用的
现在,我希望您没有任何客人使用电子邮件user42@coolcompagny.com
或类似内容,否则此项将在此处失败,因为您只需获得user42@coolcom
:(
使用正则表达式解析电子邮件地址根本不是一项简单的任务。您可以使用awk获取该行的部分内容。在您的情况下,它将类似于:
cat file | grep -o 'user.*?com'
grep -Po 'user.*?com' file
要获得更多功能,您应该查看GNU Awk用户指南。*?模式只有在您为grep提供-p选项时才有效,该选项启用Perl风格的regexp。添加该选项,它应该会起作用。无用地使用Cat spotted!
grep
不会更改行。它只会显示包含您提供的regex的行。您想要吗o使用sed
。请参阅man grep
和man sed
。另外,这些原始行是否正确?我希望电子邮件字符串以
结尾。这很好,你能给我一个关于这段代码如何工作的快速概述吗?我对regex相当陌生,你甚至不需要cat和grep。awk是enou请注意,在电子邮件地址的末尾有
cat file | grep -o 'user.*?com' | awk -F',' '{print $1}'