sed以匹配多行范围并替换

沙申派

我有下面的文件

next: 
    {
     host = "http://nxt-newepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz"
    };

second:
   {
     host = "http://nxt-secondepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz"
    };

我想替换基于nxt:{ host = ""的url second: { host = ""我如何使用带有多行匹配的sed过滤此内容,因为它们在多行中?

我试过了:

sed -i '/second : {\rhost/s#"http://.*"#"next.com"#' file.txt

没用 我正在\r换行,但我也尝试过\n

维克多·史翠比维

如果我们可以假设您的网址位于第二行second:,则可以使用

sed -i '/second:/{N;N;s#"http://.*"#"next.com"#}' file

请参阅此在线sed演示

N将换行符和随后的行追加到模式空间。因此,substitute命令在以下文本上运行:

second:
   {
     host = "http://nxt-secondepisode.xcfm.crata.dive.com/err1.2.2/table/kenny.xml.gz"

如果不知道确切的是哪一行,则可以在找到以0+空格开头的lione之前循环,然后进行循环,然后host =再运行替换:

sed -i '/second:/{:a;n;/^ *host *=/!ba;s#"http://.*"#"next.com"#}' file

请参阅此在线sed演示

这里,

  • /second:/ -一旦一行包含 second:
  • :a -设置名为 a
  • n -丢弃当前模式空间并读入下一行
  • /^ *host *=/!ba-如果该行不是(!)以0+空格host、、 0+空格开头=,则返回(b)返回标签a位置
  • s#"http://.*"#"next.com"# -运行替代。

文字空间可以用替换[[:space:]]*[[:blank:]]*\s*匹配任何空格,这取决于您的作品sed

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档