替换匹配模式前两行的字符串
Replace string which is two lines previous to matched pattern
我有一个很大的 config.js 文件,我想将 default:false,
替换为 field:'$scope.keepEffort'
之上的 default:true,
。我尝试了多个 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'
},{
这是 awk
的工作。以下不会尝试匹配单引号,因为这样做需要一些 shell 引号来混淆解决方案。此外,还会打印尾随 {
。这很容易删除,为清楚起见省略了这样做的代码:
awk '/field:.$scope.keepEffort/{gsub("default:false","default:true")}1' RS=\{ ORS=\{ input-file
这个想法只是简单地用 {
分隔记录,然后仅在与所需行匹配的记录上执行替换(通过 gsub
)。
这可能适合您 (GNU sed):
sed ':a;/{/{n;:b;N;/}/!bb;/$scope.keepEffort/s/\(default:\)false,/true,/;ba}' file
收集 {
和 }
之间的行,如果这些行包含 $scope.keepEffort
将 default:false
替换为 default:true
。
N.B。在匹配 {
之后添加 n
允许匹配 }
。另外,return 到 :a
后收集一个集合,以便能够匹配另一个 {
.
我有一个很大的 config.js 文件,我想将 default:false,
替换为 field:'$scope.keepEffort'
之上的 default:true,
。我尝试了多个 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'
},{
这是 awk
的工作。以下不会尝试匹配单引号,因为这样做需要一些 shell 引号来混淆解决方案。此外,还会打印尾随 {
。这很容易删除,为清楚起见省略了这样做的代码:
awk '/field:.$scope.keepEffort/{gsub("default:false","default:true")}1' RS=\{ ORS=\{ input-file
这个想法只是简单地用 {
分隔记录,然后仅在与所需行匹配的记录上执行替换(通过 gsub
)。
这可能适合您 (GNU sed):
sed ':a;/{/{n;:b;N;/}/!bb;/$scope.keepEffort/s/\(default:\)false,/true,/;ba}' file
收集 {
和 }
之间的行,如果这些行包含 $scope.keepEffort
将 default:false
替换为 default:true
。
N.B。在匹配 {
之后添加 n
允许匹配 }
。另外,return 到 :a
后收集一个集合,以便能够匹配另一个 {
.