Aqui estão algumas opções:
-
Use
grep
com o sinalizador-o
para imprimir apenas a parte correspondente da linha e filtrar comhead
para obter apenas a primeira correspondência:grep -o '"accountHeader[^}]*}' file.json | head -n1
A expressão regular procura por
"accountHeader
e pelo maior número possível de caracteres que não sejam}
até o primeiro}
. É basicamente o mesmo regex usado nas outras soluções abaixo também. -
Use
sed
com-n
para suprimir a impressão ep
após a substituição para imprimir apenas se a substituição tiver sido um sucesso. Então, substitua (remova) tudo menos o que você quer:sed -n 's/.*\("accountHeader[^}]*}\).*//p' file.json
-
Use Perl, o
-l
adiciona uma nova linha a cada chamada deprint
, o-n
significa "processa cada linha do arquivo de entrada" e aplica o script fornecido por-e
:perl -lne '/.*("accountHeader[^}]*})/ && print $1' file.json
-
Use
awk
, isso pressupõe que**
em sua entrada de exemplo esteja lá para destacar a parte em que você está interessado e não existe realmente nos dados reais. Em caso afirmativo, isso deve funcionar:awk -F'},' '{print $2"}"}' file.json
Se o **
estiver realmente lá, as coisas são ainda mais simples, use-as como delimitadores de campo:
awk -F'**' '{print $2"}"}' file.json
ou
perl -F"\*\*" -alne 'print $F[1]' file.json