Sostituire la stringa con due linee precedente a con il pattern

0

Domanda

Ho una grande config.js file e vorrei sostituire default:false, per default:true, che si trova sulla cima di field:'$scope.keepEffort'. Ho provato più sed comando di soluzioni, ma nulla sembra funzionare.

                    {
                            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

Migliore risposta

1

Questo è un lavoro per awk. Il seguente non tenta di far corrispondere le virgolette, perché così facendo richiede un po ' di shell citando che offuscare la soluzione. Inoltre, un trailing { viene stampato. Che è abbastanza facile da rimuovere, e il codice per farlo è omessi per chiarezza:

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

L'idea è semplicemente di separare i record { e quindi eseguire la sostituzione (via gsubsolamente i record che soddisfano la linea desiderata.

2021-11-23 20:28:16

Ringrazio molto la tua soluzione funziona, ma io sono nuovo di awk e sed comando come posso rimuovere l'ultimo extra { file che è stato aggiunto il comando stesso
pw6591

Che finale { è aggiunto l'ultima riga, quindi è probabilmente più facile semplicemente tubo di sed. ad esempio awk ... | sed '$d'. Il sed comando cancella l'ultima riga.
William Pursell
0

Questo potrebbe funzionare per voi (GNU sed):

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

Raccogliere linee tra { e } e se queste linee contengono $scope.keepEffort sostituire default:false da default:true.

N. B. L'aggiunta di n dopo di corrispondenza { che consente di far corrispondere }. Inoltre, il ritorno di :a dopo la raccolta di una collezione in modo da essere in grado di eguagliare un altro {.

2021-11-23 23:32:01

In altre lingue

Questa pagina è in altre lingue

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