Chaîne de remplacement qui est de deux lignes antérieures à motif correspondant

0

La question

J'ai un gros config.js fichier et je voudrais remplacer default:false, pour default:true, qui est sur le haut de field:'$scope.keepEffort'. J'ai essayé plusieurs sed commande des solutions, mais rien ne semble fonctionner.

                    {
                            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

La meilleure réponse

1

C'est un travail pour awk. Ne pas tenter de faire correspondre les guillemets simples car cela nécessite une certaine shell citant que dissimule la solution. Aussi, une fuite { est imprimé. C'est assez facile à enlever, et le code pour le faire est omis pour plus de clarté:

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

L'idée est simplement de séparer les enregistrements par { et puis effectuer la substitution (via gsub) uniquement sur les enregistrements qui correspondent à la ligne désirée.

2021-11-23 20:28:16

Je vous remercie beaucoup de votre solution fonctionne, mais je suis de nouveau à awk et sed commande alors, comment dois-je supprimer le dernier extra { dans le fichier qui ont été ajoutés dans la même commande
pw6591

Cette finale { est ajoutée à la dernière ligne, il est donc probablement plus facile de simplement pipe à ce sed. par exemple awk ... | sed '$d'. L' sed commande va supprimer la dernière ligne.
William Pursell
0

Cela pourrait fonctionner pour vous (GNU sed):

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

Recueillir des lignes entre { et } et si ces lignes contiennent $scope.keepEffort remplacer default:false par default:true.

N. B. l'ajout de La n après la mise en correspondance { qui permet de faire correspondre les }. Aussi, le retour à l' :a après avoir rassemblé une collection de manière à être en mesure de correspondre à un autre {.

2021-11-23 23:32:01

Dans d'autres langues

Cette page est dans d'autres langues

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