为什么 grep 不从安全实用程序的输出中提取?回声作品的可比提取

Why does grep not extract from security utility's output? Comparable extraction from echo works

在 OS X 中,有一个名为 security 的命令行实用程序,用于访问钥匙串。它可以 return 钥匙串中条目的密码,这就是我正在尝试做的。当我 运行 security find-internet-password -ga an_entry | grep "password" 时,我得到以下输出,正如预期的那样:

password: "apassword123"

我想提取引号之间的文字。 grep,特别是 pcregrep,应该有效但无效:

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

Returns:

apassword123

符合预期,但是:

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

Returns:

password: "apassword123"

这是荒谬的。

您的输出实际上没有通过 grep,因为它在 stderr 上。您应该能够通过将 stderr 重定向到 stdout 来做到这一点

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