sed拼图修改自己的bash脚本
前一段时间我发布了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分离器,而不是/
这将/
以上是 sed拼图修改自己的bash脚本 的全部内容, 来源链接: utcz.com/qa/260719.html