命令行,多行搜索和替换

时间:2014-04-28 16:59:27

标签: awk sed multiline command-line-interface

在Riak app.config文件中有一个如下所示的部分:

%% JMX Config
  {riak_jmx, [
     {enabled, false}
  ]},

我想替换它:

%% JMX Config
  {riak_jmx, [
     {enabled, true}
  ]},

是的,非常简单,但我希望能够做到这一点多年,多行文字替换。我想使用AWK或Sed来执行操作。

(值得一提的是我在OSX上,因此我没有这些程序的花哨GNU版本。)

我得到的最接近的是以下,这些都没有真正正常工作......

 sed '/{riak_jmx/,/]},/{ c\
     \{riak_jmx, [\
         \{enabled, false\}

     ;   }' ./app.config

awk '/{riak_jmx/,/]},/{ if($0  ~ "{enabled, false}") {
      print "{enabled, true}" }
     else {
       print $0
     } }1' < ./app.config

哪个也不起作用。这两个命令都会打印旧版本和新版本的块。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

尝试使用sed的s命令:

sed '/{riak_jmx/,/]},/{ s/enabled, false/enabled, true/;}' ./app.config

答案 1 :(得分:2)

使用awk即可:

awk '/riak_jmx/,/]/ {sub(/false/,"true")}1' app.config
%% JMX Config
  {riak_jmx, [
     {enabled, true}
  ]},

答案 2 :(得分:1)

awk '/{riak_jmx, \[/ {print; getline; if($0 ~ /{enabled, false}/) sub(/false/,"true")}{print}' app.config

输出:

%% JMX Config
  {riak_jmx, [
     {enabled, true}
  ]}