Então eu copiei sua parte inferior em dois arquivos.
Arquivo 1:
{
"section1Configs": {
"level1Settings": {
"section01Lev01_01": true,
"section01Lev01_012": true,
"section01Lev01_02": true
}
}
}
E o arquivo 2 ...
{
"section1Configs": {
"level1Settings": {
"section01Lev01_01": true,
"section01Lev01_012": false,
"section01Lev01_02": true
}
}
}
Eles diferem apenas na linha Level01_012 .
Então eu fiz:
grep -Ev '[{}]|^$' file1 | grep -Fxvf- file2
{
"section1Configs": {
"level1Settings": {
"section01Lev01_012": false,
}
}
}
Esse comando é dividido da seguinte forma:
-
grep -Ev '[{}]|^$' file1- Aqui, pedimos que
grepimprima todas as linhas emfile1que não correspondem a{ou}, mas deve corresponder a pelo menos um personagem. -
Sua saída é semelhante a:
"section01Lev01_01": true, "section01Lev01_012": true, "section01Lev01_02": true
- Aqui, pedimos que
-
grep -Fxvf- file2- Isso é lido por este segundo
grepque interpreta seu padrão de entrada-stdin-file como-Fixed-string padrão-xcorrespondência de linha inteira que deve -vnão imprime para saída. E assim, este segundogrepimprime todas as linhas no arquivo2 que não correspondem exatamente às linhas verdadeiro / falso no arquivo1.
- Isso é lido por este segundo
Agora, se o seu grep não entender - como stdin, temos algumas opções:
grep -Ev '[{}]|^$' file1 | grep -Fxvf /dev/fd/0 file2
... funcionará na maioria dos sistemas. Uma opção semelhante é usar /dev/stdin , que também é muito provável que funcione, se bem que um pouco menos.
Existe também uma implementação específica do shell, conhecida como substituição de processo , que funciona exatamente da mesma maneira ...
grep -Fxvf <(grep -Ev '[{}]|^$' file1) file2
... que pode ou não funcionar para você, dependendo do seu shell.
Outra possibilidade é ...
grep -Fxv "$(grep -Ev '[{}]|^$' file1)" file2
... que pode ou não funcionar para você, dependendo de quão grande é a saída do comando subbed grep .
Experimente alguns e provavelmente encontrará um que funcione para você.