Bash 巴什格雷普在第一场比赛中停了下来

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 注意,这里我不需要猫 这将使用字符类[:空格:。

然而,由于“.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
注意,这里我不需要猫

这将使用字符类
[:空格:
。我想说的是,我想要所有以
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}'