Wymień pasek, który jest dwoma wierszami, poprzednich совпадающему szablonu

0

Pytanie

Mam ogromny config.js plik, i chciałbym wymienić default:false, Dla default:true, który znajduje się na szczycie field:'$scope.keepEffort'. Próbowałem kilka sed drużynowe rozwiązania, ale wydaje się, że nic nie działa.

                    {
                            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

Najlepsza odpowiedź

1

To praca dla awk. Poniżej nie próbuje dopasować pojedyncze cudzysłowy, ponieważ do tego potrzebny jakiś cytat powłoki, która dezorientuje rozwiązanie. Ponadto, śledzenie { jest drukowany. Jest to dość łatwe do usunięcia, a kod do tej pominięty dla jasności:

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

Pomysł polega na tym, aby po prostu podzielić nagrywania { a następnie wykonaj substytucji (przez gsub) tylko dla rekordów odpowiadających żądanej linii.

2021-11-23 20:28:16

Dziękuję bardzo, twoje rozwiązanie działa, ale jestem nowy w zespołach awk i sed, tak jak powinienem usunąć ostatni artykuł plik { in, który został dodany w tej samej drużynie
pw6591

Ten ostatni { dodany jako ostatni wiersz, więc chyba najprościej po prostu przekazać to w sed. na przykład awk ... | sed '$d'. W sed zespół usunie ostatnią linię.
William Pursell
0

To może zadziałać dla ciebie (GNU sed):

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

Zbierz linii między { i } i jeśli te wiersze zawierają $scope.keepEffort wymieniać default:false Autor: default:true.

N. B. Dodawanie n po mapowania { co pozwala porównać }. Ponadto, powrót do :a po zebraniu kolekcji, aby móc dopasować inny {.

2021-11-23 23:32:01

W innych językach

Ta strona jest w innych językach

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