在 OS X 中,有一个名为 security
的命令行实用程序它旨在访问钥匙串(keychain)。它可以返回钥匙串(keychain)中条目的密码,这就是我想要做的。当我运行security find-internet-password -ga an_entry | grep "password"
时正如预期的那样,我得到以下输出:
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"
这是荒谬的。
最佳答案
您的输出实际上并未通过 grep
,因为它位于 stderr 上。您应该能够通过将 stderr 重定向到 stdout 来做到这一点,例如
security find-internet-password -ga anentry 2>&1 | pcregrep -o '^password:\s"(?!_)\K[^"]+'
关于regex - 为什么 grep 不从安全实用程序的输出中提取?从 echo 作品中进行比较提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284278/