$ perl -0777 -pe '$s="item1"; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item2': { 'buy': 'apple', 'drink': x'cola',
'work': 'slow',
'eat': 'sweet',
'travel': 'world' },
'item3': { 'buy': 'bananna',
'drink': x'cooldrink',
'work': 'hard',
'study': 'science'}})
Some other content in this file.
$ perl -0777 -pe '$s="item3"; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' },
'item2': { 'buy': 'apple', 'drink': x'cola',
'work': 'slow',
'eat': 'sweet',
'travel': 'world' }})
Some other content in this file.
$ perl -0777 -pe '$s="item2"; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' },
'item3': { 'buy': 'bananna',
'drink': x'cooldrink',
'work': 'hard',
'study': 'science'}})
Some other content in this file.
- Usa
-0777
para fazer slurp de todo o arquivo es
sinalizador para permitir que.*
corresponda às linhas -
s/ *\x27$s\x27:\s*\{.*?\},\n*//s
para elementos comoitem1
eitem2
, em que,
segue}
-
s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s
para elementos comoitem3
onde suspeito que você precise remover um,
na linha anterior -
\x27
código hexadecimal para aspas simples - altere apenas
$s="item2";
para o elemento obrigatório a ser removido
Editar:
Para passar variáveis do shell (consulte este Q & A em SO para detalhes)
$ export var1='item3'
$ perl -0777 -pe '$s=$ENV{var1}; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' },
'item2': { 'buy': 'apple', 'drink': x'cola',
'work': 'slow',
'eat': 'sweet',
'travel': 'world' }})
Some other content in this file.
Você também pode excluir vários itens
$ export var1='(item3|item2)'
$ perl -0777 -pe '$s=$ENV{var1}; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' }})
Some other content in this file.