• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

sed拼图修改自己的bash脚本

bash 来源:OscarAkaElvis 3次浏览

前一段时间我发布了this。这是关于一个脚本,修改自己,一切都工作正常,把[]在sed正则表达式内的技巧,以避免修改sed线,让它找到正确的。sed拼图修改自己的bash脚本

好的,现在非常相似,但有点复杂。在另一篇文章中,要搜索的行是静态的。现在我们有几个选项用于该行。所以,有时候代码以这种方式(看的“设置= X”行):

#!/bin/bash 
possible_locations=(
      "/somewhere/path/" 
      "/another/different/path/" 
      #Custom location (set=0) 
      ) 
#Here goes my sed line 

等次的代码是:

#!/bin/bash 
possible_locations=(
      "/somewhere/path/" 
      "/another/different/path/" 
      "/other/one/path/" #Custom location (set=1) 
      ) 
#Here goes my sed line 

保持和眼睛上的标签缩进在行的开始。

好吧,我要的是修改脚本本身(使用sed -i)与这两种可能性相匹配的正则表达式,不匹配的sed线本身(如在其他职位),并在这两个替代本(设置= X)线病例:

  "/new/path/" #Custom location (set=1) 

所以我想替换线(保持同一标签缩进),有时只有#Custom location (set=0)有时不得不"/other/one/path/" #Custom location (set=1)"/new/path/" #Custom location (set=1)

我尝试了不同的组合捕获组,等等…但不能使它工作。我想我非常接近!这里是我的非工作的sed行:

sed -i "s/^\(.*\)#[C]ustom location (set=[0-1])/\1\"\\/new\\/path\\/\" #Custom location (set=1)/" "/path/to/this/script.sh" 2> /dev/null

===========解决方案如下:

您可以使用它保留空间&选项卡下面:

NEW_PATH=\"/new/path/\" 

sed -ri "s_(\s+|\t+)([^ ]*)(\s*#Custom location \(set=)([0-9]+)(\))_\1$NEW_PATH \31\5_" test.conf 

使用以下组:

  • (\s+|\t+)比赛任何空格或制表符
  • ([^ ]*) matc HES任何东西,但空间( “path_string” 如果存在的话)
  • (\s*#Custom location \(set=)直到集合中的评论相匹配=
  • ([0-9]+)设定值
  • (\))匹配闭合)

被替换的分组是\1$NEW_PATH \31\5(匹配1用于set值)

注意,我之后,用于$NEW_PATH可变加入另外的空间当n°1哪里有评论之前不存在空间

另外请注意,我用_ SED分离器,而不是/这将/


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)