从钥匙串输出中删除字符串

时间:2017-12-01 22:58:04

标签: bash shell awk sed cut

运行后

  

test = $(安全2>& 1> / dev / null find-generic-password -ga test)回音   $测试

输出

  

密码:" 1234"

我想删除所有内容,只保留实际密码,在这种情况下只需

  

1234

任何帮助?

3 个答案:

答案 0 :(得分:1)

如果格式始终为password: "value",则可以使用高效而不使用任何外部实用程序仅使用子字符串扩展:

echo "${test:11:-1}" #output: 1234

如果您坚持使用其他实用程序:

awk -F'"' '{ print $2 }' <<< "$test" #output: 1234
cut -d'"' -f2 <<< "$test" #output: 1234

如果密码中包含"字符,则上述两个命令都将失败。使用sed在密码中使用"正常工作的另一种解决方案:

sed 's/^password: "\(.*\)"$/\1/' <<< "$test" #output: 1234

答案 1 :(得分:0)

您可以通过以下方式解决:

命令:

 echo 'password: "1234"' | awk -F"\"" '{print $2}'

输出:

1234

答案 2 :(得分:0)

使用与Grep

的Perl兼容正则表达式

如果你的系统有一个用PCRE引擎编译的grep(例如pcregrep,或支持grep -P),那么你可以将pcregrep -o ': "\K[^"]+'放入你的管道。例如,仅将引号之间的材料发送到标准输出:

$ echo 'password: "1234"' | pcregrep -o ': "\K[^"]+'
1234

$ echo 'password: "ABCD"' | pcregrep -o ': "\K[^"]+'
ABCD

$ echo 'password: "1A2B3C4D"' | pcregrep -o ': "\K[^"]+'
1A2B3C4D