我有一个 JSON 格式的文件用户名和密码,我想将其转换为进程。
我使用sed了不同的命令来处理它,但我想知道的是如何将所有三个命令合并为一个以备将来使用。
原始格式
{ "user.name1" : "hashed_password",
"user.name2" : "hashed_password" }
Run Code Online (Sandbox Code Playgroud)
期望输出
user.name:hashed_password
Run Code Online (Sandbox Code Playgroud)
这些是我运行的命令,但是我无法使用管道将它们链接在一起,或者只是在出现错误的地方将它们连接起来,sed: -e expression #1, char 8: unknown option to 's'.
违规命令...
sed -i 's/\"//g/s/\,/\n/g/\s//g' input_file
sed: -e expression #1, char 8: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
如何将以下命令连接为一个?
命令删除双引号
sed -i 's/\"//g' input_file
用新行替换逗号
sed -i 's/\,/\n/g' input_file
删除空格
sed -i 's/\s//g input_file
Att*_*tie 18
要将多个sed命令放在一个“脚本”中,您可以使用多个-e标志(这是可移植的):
sed -i -e 's/\"//g' -e 's/\,/\n/g' -e 's/\s//g' input_file
Run Code Online (Sandbox Code Playgroud)
或分号分隔符(并非在所有实现中都可用):
sed -i 's/\"//g;s/\,/\n/g;s/\s//g' input_file
Run Code Online (Sandbox Code Playgroud)
您还需要为大括号添加处理 - {}...
话虽如此,为了正确解析和处理 JSON,您不应该真正使用sed......也许尝试jq!
jq -r 'keys[] as $k | "\($k):\(.[$k])"' input_file
Run Code Online (Sandbox Code Playgroud)
输出:
user.name1:hashed_password
user.name2:hashed_password
Run Code Online (Sandbox Code Playgroud)
keys[] as $k 将遍历存储其值的每个键 $k
user.name1,user.name2"\($k):\(.[$k])"将形成一个字符串,代入$k和.[$k]-r从输出字符串中删除引号(原始模式)使用sed来处理 JSON 会让您面临各种问题……例如,您将如何处理以下(完全有效的 JSON)输入?
{
"user.name1" :
"hashed_password",
"user.name2" :
"hashed_password"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7653 次 |
| 最近记录: |