我不明白to_entriesjq 是如何工作的。
我有以下 json 有效负载payload.json
{"REGION":"us-east-1","EMAIL":"contain","UPDATE":1}
Run Code Online (Sandbox Code Playgroud)
我想将其转换为=分隔密钥对,如下所示;
REGION=us-east-1
EMAIL=contain
UPDATE=1
Run Code Online (Sandbox Code Playgroud)
我正在使用
jq -r 'to_entries | .[] | .key + "=" + .value' < payload.json
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误
jq: error (at <stdin>:0): string ("UPDATE=") and number (1) cannot be added
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,问题在于更新值是一个数字,而不是一个字符串(即,它们的类型不匹配是一个问题),所以我尝试了以下操作,都出现了相同的错误;
string interpolation:
jq -r 'to_entries | .[] | (.key) + "=" + (.value)' < payload.json
tostring:
jq -r 'to_entries | .[] | .key + "=" + .value|tostring' < payload.json
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
TL; DR:给定一个带有一系列密钥对的输入文件,我想选择倒数第三对和倒数第四对。我可以单独购买它们,但如果可能的话,我想同时抓住它们。能做到吗?
我的输入文件的结构如下:
[
{
"foo": "bar",
"foo2": "bar2"
},
{
"foo3": "bar3",
"foo4": "bar4"
},
{
"foo5": "bar5",
"foo6": "bar6"
},
{
"foo7": "bar7",
"foo8": "bar8"
},
{
"foo9": "bar9",
"foo10": "bar10"
}
]
Run Code Online (Sandbox Code Playgroud)
我的输出应该是
[
{
"foo3": "bar3",
"foo4": "bar4"
},
{
"foo5": "bar5",
"foo6": "bar6"
}
]
Run Code Online (Sandbox Code Playgroud)
我知道我可以jq -s '.[-3]'拿到倒数第3名(并用4倒数第4名换掉),但这会分别抓住他们。
我从文档中认为jq -s '.[-3;-4]'可以同时抓住两者,但是会引发错误。
我可以单独抓取它们,然后分别进行处理,但这是草率的代码。有没有一种更干净的方式可以同时抓取两者?
我正在比较两个文件的结果,其中一个是不在另一个文件中使用的 grep -v -f file1.txt file2.txt > result.txt
假设我的文件看起来像;
FILE1.TXT
alex
peter
zoey
Run Code Online (Sandbox Code Playgroud)
FILE2.TXT
alex
john
peter
zoey
Run Code Online (Sandbox Code Playgroud)
所以result.txt应该包含john
这是在Jenkins工作中运行的,result.txt如果两者之间没有差异,jenkins最终不满意创建一个空.
我不能只做一个盲目差异/无差异输出,我特别需要知道哪些线路有所不同.
如果没有结果,是否有更简洁的方法来运行此命令以不创建文件?
我在 bash 脚本中使用 pwgen。为了安全起见,我们必须使用该-y标志来包含至少一个特殊字符。然而,这经常返回带有一个或多个 ` 或 " 的密码,这会破坏周围的脚本。
我可以阻止生成这些字符吗?如果没有,删除、替换或以其他方式清理 pwgen 的输出以排除这些字符的最干净方法是什么?
我当前的 pwgen 是;
intPW=$(pwgen -c -n -y -B -1 15)
Run Code Online (Sandbox Code Playgroud)
这意味着 intPW 的值可能是这样的;
iqui`c:ee4so4Ch
hph7eew"ohr9Ee
Run Code Online (Sandbox Code Playgroud)
我需要保证每个密码中都有一个符号,而不是有问题的符号之一。
我能想到的任何替换(从 if 循环到 sed)都会中断,因为我试图针对反引号。
我正在处理一个小文本文件,其中包含一个单词列表,我想添加一个新单词,然后排序.我启动时文件末尾没有换行符,但排序后却没有换行符.为什么?我可以避免这种行为,还是有办法将换行删除?
words.txt 好像
apple
cookie
salmon
Run Code Online (Sandbox Code Playgroud)
然后我跑了 printf "\norange" >> words.txt; sort words.txt -o words.txt
我使用printf而不是echo来确定是否会避免换行,但文件会读取
apple
cookie
orange
salmon
#newline here
Run Code Online (Sandbox Code Playgroud)
如果我只是运行printf "\norange" >> words.txt橙色出现在文件的底部,没有换行符,即;
apple
cookie
salmon
orange
Run Code Online (Sandbox Code Playgroud) 我正在尝试从json文件中删除一个特定的键/值对。
在本例中,我的json文件是 params.json
[
{
"ParameterKey": "RTSMMinSize",
"ParameterValue": "1"
},
{
"ParameterKey": "RTSMReplicateDB",
"ParameterValue": "false"
},
{
"ParameterKey": "RTSMSnapshotID",
"ParameterValue": "snapID"
},
{
"ParameterKey": "RTSMEMAIL",
"ParameterValue": ""
}
]
Run Code Online (Sandbox Code Playgroud)
我想在RTSMSnapshotID我的bash脚本中完全删除键值对。该文件应如下所示:
[
{
"ParameterKey": "RTSMMinSize",
"ParameterValue": "1"
},
{
"ParameterKey": "RTSMReplicateDB",
"ParameterValue": "false"
},
{
"ParameterKey": "RTSMEMAIL",
"ParameterValue": ""
}
]
Run Code Online (Sandbox Code Playgroud)
我以为这很简单
jq 'del(.RTSMSnapshotID)' params.json
Run Code Online (Sandbox Code Playgroud)
但我越来越
jq: error (at <filename>): Cannot index array with string "RTSMSnapshotID"
Run Code Online (Sandbox Code Playgroud)
显然,我不明白删除的工作原理。有什么帮助吗?
我的 json 知识很不稳定,所以如果我使用了错误的术语,请原谅我。
我有input.txt可以简化为:
[
{
"foo1": "bar1",
"baz1": "fizz1"
},
{
"foo2": "bar2",
"baz2": "fizz2"
}
]
Run Code Online (Sandbox Code Playgroud)
我想通过循环迭代每个对象,所以我本质上希望首先处理 1,然后循环处理 2,等等。
我以为是这样的:
jq 'keys[]' input.json | while read key ; do
echo "loop --$(jq "[$key]" input.json)"
done
Run Code Online (Sandbox Code Playgroud)
但这给了我
loop 0
loop 1
Run Code Online (Sandbox Code Playgroud)
我希望看到的地方(这里的间距是可选的,不确定 jq 将如何解析它):
loop { "foo1": "bar1", "baz1": "fizz1" }
loop { "foo2": "bar2", "baz2": "fizz2" }
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
我们通常必须从多个不同版本的数据库中 pg_dump。我想在具有正确 Postgres 版本的 Docker 容器内运行命令,并将转储输出输出到我的文件而不是容器。
我以为我会像这样实现它;
docker run -it postgres:9.6.6-alpine pg_dump --file backupFile.bak --dbname=CONNECTIONSTRING --verbose --format=c --blobs > backupFile.bak
Run Code Online (Sandbox Code Playgroud)
然而,这只是将 pg_dump 命令的终端输出输出到文件,而不是实际的转储。我最终得到一个本地文件,它只是命令的详细日志。
我错过了什么?