如何使用grep的正则表达式从文件中提取base64文本

时间:2018-04-03 15:09:03

标签: regex bash grep

我有以下内容:

CreateWithUser

我需要用grep提取{ "auths": { "https://index.docker.io/v1/": { "auth": "TXlQYXNzd29yZA==" } }, "HttpHeaders": { "User-Agent": "Docker-Client/17.12.0-ce (linux)" } } 并解码它 对于解码,我可以使用"TXlQYXNzd29yZA=="base64 -d),但我不知道如何提取确切的线。
随着崇高,我几乎成功地抓住它:

echo TXlQYXNzd29yZA== | base64 -d

我得到(?!\"auth\": ) "(.*)" ,因为开头的空间而不完美 无论如何,我发现崇高的正则表达式与grep的正则表达式不同 我尝试使用这些网络工具:
http://www.ericagamet.com/wp-content/uploads/2016/04/Erica-Gamets-GREP-Cheat-Sheet.pdf https://regex101.com/

但我没有成功。

我发现" TXlQYXNzd29yZA=="给了我:

grep 'auth":'

似乎是一个好的开始。
我也试过 "auth": "TXlQYXNzd29yZA==" grep '(?!auth":)',没有任何反应。

2 个答案:

答案 0 :(得分:5)

我建议使用真正的json解析器,如jq而不是grep。

$ jq -r '.auths | .[] | .auth' /path/to/file

答案 1 :(得分:2)

后面看

$ grep -oP '(?<="auth": ")[^"]+' file | base64 -d

MyPassword

grep不支持-P选项

$ sed -nr 's/.*"auth": "([^"]+)"/\1/p' | base64 -d