Cadena de reemplazo, que es de dos líneas anteriores a igualados patrón

0

Pregunta

Tengo una gran config.js archivo y me gustaría sustituir default:false, a default:true, el que está en la parte superior de field:'$scope.keepEffort'. He probado con varios sed comando de soluciones, pero 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

Mejor respuesta

1

Este es un trabajo para awk. La siguiente no intento para que coincida con las comillas simples, ya que eso requiere algo de shell citando que ofusca la solución. También, un final { se imprime. Que es bastante fácil de quitar, y el código para hacerlo es omitido para mayor claridad:

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

La idea es simplemente para separar los registros por { y, a continuación, realizar la sustitución de (a través de gsubsólo los registros que coincidan con la línea deseada.

2021-11-23 20:28:16

Muchas gracias tu solución funciona, pero soy nuevo en el awk y sed orden, de modo que ¿cómo debo de quitar el último extra { en el archivo que se añadió en el mismo comando
pw6591

Que final { se agrega como la última línea, por lo que es probablemente más fácil para canalizar esta a sed. por ejemplo awk ... | sed '$d'. El sed comando borrar la última línea.
William Pursell
0

Esto podría funcionar para usted (GNU sed):

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

Recoger las líneas entre { y } y si esas líneas contienen $scope.keepEffort reemplazar default:false por default:true.

N. B. La adición de la n después de coincidir { que permite la coincidencia de }. También, el retorno a :a después de reunir una colección así como para ser capaces de encontrar otro {.

2021-11-23 23:32:01

En otros idiomas

Esta página está en otros idiomas

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