我有一个 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 次 |
最近记录: |