我正在尝试从 JSON 有效负载中删除对象(如果它们具有具有特定值的键)
{
"data": [
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4",
"timestamp": "2020-08-28T01:29:46.000000Z"
},
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "l3EQR6AJ6R1qE1meHyafDnNF8vJ-X-rH1pujxQRTds4",
"timestamp": "2020-08-28T00:50:44.000000Z"
},
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "5fQJY9MprH9b3IstVU1SdfBteUWoF_sdsVuiARPBtTY",
"timestamp": "2020-08-27T19:01:48.000000Z"
},
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "0M0fudEmzW9dmAsO3dcWT286tTL6wTX9sllXtsyz-0Q",
"timestamp": "2020-08-27T18:15:17.000000Z"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想删除.data[].hash==0M0fudEmzW9dmAsO3dcWT286tTL6wTX9sllXtsyz-0Q生成的整个对象:
{
"data": [
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4",
"timestamp": "2020-08-28T01:29:46.000000Z"
},
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "l3EQR6AJ6R1qE1meHyafDnNF8vJ-X-rH1pujxQRTds4",
"timestamp": "2020-08-28T00:50:44.000000Z"
},
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"gateway": …Run Code Online (Sandbox Code Playgroud) 所以我可以这样做
jq --arg title "Test" 'select(.title == $title) | .alert.notifications = [{"uid":"foo"},{"uid":"bar"}]' json
Run Code Online (Sandbox Code Playgroud)
输出所需的结果:
{
"alert": {
"notifications": [
{
"uid": "foo"
},
{
"uid": "bar"
}
]
},
"title": "Test"
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要将数组放入 var 中并动态提供它,例如:
array='{ "uid": "foo" },{ "uid": "bar"}'
jq -r --arg title "$t" --arg array "$array" 'select(.title == $title) | .alert.notifications = [$array]'
Run Code Online (Sandbox Code Playgroud)
但这会导致这种不期望的输出
{
"alert": {
"notifications": [
"{ \"uid\": \"foo\" },{ \"uid\": \"bar\" }"
]
},
"title": "Test"
}
Run Code Online (Sandbox Code Playgroud)
有办法解决这个问题吗?非常感激!!
我需要一些关于 perl 脚本的快速建议。我创建了一个脚本,它基本上调用了其他 perl 脚本和其中的许多其他 shell 脚本。我面临的问题只是试图通过设置一个环境变量来使其在通用级别上运行。
顺便说一下,这是在 linux RHEL/CentOS 上...
所以我将我的变量添加到 .bash_profile 并且如果我首先手动获取文件,然后运行我的 perl 脚本,它可以正常工作!这是,好的,但我希望脚本自动化这部分,而不是需要额外的手动采购步骤。
所以我的脚本看起来像这样......简而言之
#!/usr/bin/perl
use warnings;
use strict;
`/bin/bash ~/.bash_profile`;
blah blah blah more code etc;
Run Code Online (Sandbox Code Playgroud)
启动主脚本(这部分代码所在的位置)时,它没有问题。这是对其他脚本的所有后续调用都失败了……就好像它没有将变量传递给其他脚本一样。
有任何想法吗??
谢谢,
我有一个简单的Perl脚本,我想删除"城市"这个词.或删除逗号","的第n次出现(在我的特定情况下为第2次)的所有内容.这是下面的内容.
#!/usr/bin/perl
use warnings;
use strict;
my $CMD = `curl http://ip-api.com/json/8.8.8.8`;
chomp($CMD);
my $find = "^[^city]*city";
$CMD =~ s/$find//;
print $CMD;
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
{"as":"AS15169 Google Inc.","city":"Mountain View","country":"United States","countryCode":"US","isp":"Google","lat" :37.386,"lon":-122.0838,"org":"Google","query":"8.8.8.8","region":"CA","regionName":"California","status":"success","timezone":"America/Los_Angeles","zip":"94035"}
Run Code Online (Sandbox Code Playgroud)
所以我想放弃
" {"as":"AS15169 Google Inc.","
Run Code Online (Sandbox Code Playgroud)
或者放弃
{"as":"AS15169 Google Inc.","city":"Mountain View",
Run Code Online (Sandbox Code Playgroud)
我发现在匹配字符串时我做得太多了.我在"城市"之前删除所有内容,简化了我的问题修复.我的$ find已更改为
my $find = ".*city";
Run Code Online (Sandbox Code Playgroud)
虽然我也改变了替换功能,
$CMD =~ s/$find/city/;
Run Code Online (Sandbox Code Playgroud)
仍然没有弄清楚如何在第n次出现逗号或任何字符/字符串之前删除所有内容.