Замените строку, которая является двумя строками, предшествующими совпадающему шаблону

0

Вопрос

У меня есть большой config.js файл, и я хотел бы заменить default:false, Для default:true, который находится на вершине field:'$scope.keepEffort'. Я пробовал несколько sed командные решения, но, похоже, ничего не работает.

                    {
                            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

Лучший ответ

1

Это работа для awk. Ниже не предпринимается попытка сопоставить одинарные кавычки, поскольку для этого требуется некоторое цитирование оболочки, которое запутывает решение. Кроме того, следящий { печатается. Это достаточно легко удалить, и код для этого опущен для ясности:

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

Идея состоит в том, чтобы просто разделить записи по { а затем выполните подстановку (через gsub) только для записей, соответствующих нужной строке.

2021-11-23 20:28:16

Большое вам спасибо, ваше решение работает, но я новичок в командах awk и sed, так как я должен удалить последний дополнительный файл { in, который был добавлен в той же команде
pw6591

Этот последний { добавляется в качестве последней строки, поэтому, вероятно, проще всего просто передать это в sed. например awk ... | sed '$d'. В sed команда удалит последнюю строку.
William Pursell
0

Это может сработать для вас (GNU sed):

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

Соберите линии между { и } и если эти строки содержат $scope.keepEffort заменять default:false Автор: default:true.

N. B. Добавление n после сопоставления { что позволяет сопоставлять }. Кроме того, возвращение к :a после сбора коллекции, чтобы иметь возможность соответствовать другой {.

2021-11-23 23:32:01

На других языках

Эта страница на других языках

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