替换串其是两条线上匹配的模式

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命令所以我应该怎么删除最后一个额外的{在文件,该文件得到了加在同一命令
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ý
..................................................................................................................