我想在 /var/log/secure 文件中仅显示电子邮件地址。电子邮件进入变量,因此仅搜索行是行不通的。
我知道如何将 sed 命令串联在一起,但有没有更简洁的方法?
如果有更简洁的方法来获取 ssh 密钥注释电子邮件,我甚至可以完全放弃这个想法。我正在寻找用于登录的客户端 ssh 密钥上的电子邮件注释。到目前为止,我一直在使用类似的东西。
ssh root@localhost "sleep 1 ; tail -1 /var/log/secure | ..."
我希望有更好的方法,或者至少有一种干净的方法来仅显示电子邮件。
答案1
为什么 grep 对你不起作用?它有一个-o
参数,只获取匹配项。所以类似的东西grep -o " .+@.+ " /var/log/secure
应该有效。只计算表达式以匹配电子邮件地址。
答案2
正如@Matteo 提到的,我从未见过公钥信息,/var/log/secure
但如果您只想显示文本文件中的电子邮件地址,则可以使用egrep
(用于扩展正则表达式)和-o
选项,如下所示:
$ egrep -o '[^ ]+@[^ ]+' input
或者,如果您使用,则必须转义加号grep
:
$ grep -o '[^ ]\+@[^ ]\+' input
您还可以这样做sed
:
$ sed -nr 's/.* ([^ ]+@[^ ]+).*$/\1/p' input