Substituir a seqüência de caracteres que é duas linhas anteriores para correspondência por padrão

0

Pergunta

Eu tenho um grande config.js arquivo e gostaria de substituir default:false, para default:true, o que está em cima de field:'$scope.keepEffort'. Eu tentei várias sed comando soluções, mas nada parece funcionar.

                    {
                            default:false,
                            enabled:true,
                            field:'criticalPath',
                            filter:false,
                            filterValue:'',
                            id:'show-critical-path',
                            operator:'colorize'
                    },{
                            default:false,
                            enabled:true,
                            field:'$scope.keepEffort',
                            filter:false,
                            filterValue:'',
                            id:'effort-constant',
                            operator:'var'
                    },{
                            default:false,
                            enabled:true,
                            field:'$scope.automaticProgress',
                            filter:false,
                            filterValue:'',
                            id:'automatic-progress',
                            operator:'var'
                    },{
                            default:false,
                            enabled:true,
                            field:'groupView',
                            filter:false,
                            filterValue:'',
                            id:'gantt-group-view',
                            operator:'var'
                    },{
bash sed shell
2021-11-23 19:45:38
2

Melhor resposta

1

Este é um trabalho para awk. O seguinte não tentar fazer a correspondência com as aspas simples, pois isso requer alguns shell citando que obfuscates a solução. Além disso, um à direita { é impresso. Que é bastante fácil de remover, e o código para fazer isso é omitido por motivos de clareza:

awk '/field:.\$scope.keepEffort/{gsub("default:false","default:true")}1' RS=\{ ORS=\{ input-file

A ideia é simplesmente separar os registros { e, em seguida, executar a substituição (via gsub) apenas os registos que correspondam a linha desejada.

2021-11-23 20:28:16

Muito obrigado a solução funciona, mas eu sou novo awk e sed de comando como eu deveria remover o último extra { no arquivo que foi adicionado na mesma linha de comando
pw6591

Que final { é adicionado como a última linha, por isso é provavelmente mais fácil simplesmente canalizar isso para sed. por exemplo, awk ... | sed '$d'. O sed o comando irá excluir a última linha.
William Pursell
0

Isso pode funcionar para você (GNU sed):

sed ':a;/{/{n;:b;N;/}/!bb;/\$scope.keepEffort/s/\(default:\)false,/\1true,/;ba}' file

Reunir-se entre linhas { e } e se as linhas que contêm $scope.keepEffort substituir default:false por default:true.

N. B. A adição de n depois de correspondência { o que permite a correspondência de }. Além disso, o retorno para :a depois de reunir uma coleção, de modo a ser capaz de corresponder a outro {.

2021-11-23 23:32:01

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................