Bash 检查字符串中的子字符串并移动其在主字符串中的顺序
现在我进行比较,看看主字符串中是否存在子字符串,如下所示:Bash 检查字符串中的子字符串并移动其在主字符串中的顺序,bash,shell,Bash,Shell,现在我进行比较,看看主字符串中是否存在子字符串,如下所示: main_string='{\"create\":false,\"name\":\"specified\",\"queue\":null,\"rules\":null},{\"create\":false,\"name\":\"primaryGroup\",\"queue\":null,\"rules\":null}, {\"create\":null,\"name\":\"secondaryGroupExistingQueue\",\
main_string='{\"create\":false,\"name\":\"specified\",\"queue\":null,\"rules\":null},{\"create\":false,\"name\":\"primaryGroup\",\"queue\":null,\"rules\":null}, {\"create\":null,\"name\":\"secondaryGroupExistingQueue\",\"queue\":null,\"rules\":null},{\"create\":null,\"name\":\"default\",\"queue\":null,\"rules\":null}'
substring='\"create\":false,\"name\":\"specified\",\"queue\":null,\"rules\":null'
但我不知道如何移动它的顺序。我试过了,但我不知道在bash中移动时如何实现移动或维持秩序。
(您可以注意到子字符串I selected,是main_字符串中的第一个字符串,由“,”和其他字符串分隔)
欢迎提出任何建议,谢谢你能去掉反斜杠吗?没有必要在单引号内转义双引号;反斜杠变为文字反斜杠。如果没有它们,这看起来像JSON数据,那么最好使用而不是原始字符串操作
if [[ $main_string=~ "$substring" ]]; then
jq是为处理JSON数据而定制的。它可以查询、过滤、操作、生成新的JSON数据,无论您喜欢什么。下面是最基本的查询,
,它只是简单地将输入数据原封不动地吐出。请注意jq是如何解析它并将其打印出来的。我所要做的就是传入用方括号括起来的$main_string
:
main_string='{"create":false,"name":"specified","queue":null,"rules":null},{"create":false,"name":"primaryGroup","queue":null,"rules":null},{"create":null,"name":"secondaryGroupExistingQueue","queue":null,"rules":null},{"create":null,"name":"default","queue":null,"rules":null}'
$jq-r'.'谢谢您的解释,但不幸的是我无法安装jq。需要使用bash来实现这一点。如果您想将其移动到任何其他位置,而不是始终在末尾,该怎么办?请阅读jq手册。你得摆弄它。这是一种相当成熟的语言。
$ jq -r '.' <<< "[$main_string]"
[
{
"create": false,
"name": "specified",
"queue": null,
"rules": null
},
{
"create": false,
"name": "primaryGroup",
"queue": null,
"rules": null
},
{
"create": null,
"name": "secondaryGroupExistingQueue",
"queue": null,
"rules": null
},
{
"create": null,
"name": "default",
"queue": null,
"rules": null
}
]
$ jq '(.[] | select(.name=="specified")) as $elem | . - [$elem] + [$elem]' <<< "[$main_string]"
[
{
"create": false,
"name": "primaryGroup",
"queue": null,
"rules": null
},
{
"create": null,
"name": "secondaryGroupExistingQueue",
"queue": null,
"rules": null
},
{
"create": null,
"name": "default",
"queue": null,
"rules": null
},
{
"create": false,
"name": "specified",
"queue": null,
"rules": null
}
]