2016-05-17 43 views
2

在OS X中,有一个名为security的命令行实用程序,用于访问钥匙串。它可以返回钥匙串中一个条目的密码,这正是我想要做的。当我运行security find-internet-password -ga an_entry | grep "password"我得到以下输出,符合市场预期:为什么grep不能从安全工具的输出中提取?回声工作的可比较提取

password: "apassword123" 

我想提取引号之间的文本。 grep,特别是pcregrep,应该工作,但不会:

echo 'password: "apassword123"' | pcregrep -o '^password:\s"(?!_)\K[^"]+' 

返回:

apassword123 

正如预期的那样,而是:

security find-internet-password -ga anentry | pcregrep -o '^password:\s"(?!_)\K[^"]+' 

返回:

password: "apassword123" 

哪是荒谬的。

+1

只是使用'-w'选项来'安全性'可能更简单;我一般认为生命太短,无法浪费时间去计算Perl正则表达式。 – chepner

+0

@chepner虽然这个选项的作品,这个问题仍然很有趣 –

+0

@ThomasAyoub,...是吗? “stderr不通过管道”并不完全是火箭科学,目前提出的这个问题不太可能出现在搜索结果中,因为有人用在stderr上产生该流的不同工具碰到同样的问题。 –

回答

2

您的输出实际上没有通过grep,因为它在stderr上。你应该可以通过将stderr重定向到标准输出来执行此操作,比如

security find-internet-password -ga anentry 2>&1 | pcregrep -o '^password:\s"(?!_)\K[^"]+' 
+0

我不知道stderr没有通过管道。谢谢。 –

相关问题