【问题标题】:How to search and replace multiline string in files using linux commands如何使用linux命令搜索和替换文件中的多行字符串
【发布时间】:2018-04-19 20:53:43
【问题描述】:

我有很多包含类似字符串的文件,例如多行字符串:

<script> var i = 100
         var j = 200
         var x = 1000 </script>

它可以是这样的:

<script> var i = 100
var j = 200
var x = 1000 </script>

<script> var i = 100

         var j = 200

         var x = 1000 </script>

我想用

替换它
<script> var i = 100
         var j = 200
         var x = xxxx </script>

请注意,该行也可以是无间隔的,有时它可以是制表符

我遇到问题的情况是多行,如果是简单的一行就容易了,

【问题讨论】:

  • 在哪种情况下多行有问题?请发布您尝试过的解决方案。

标签: regex linux sed find


【解决方案1】:

在 perl 中多行替换很容易:

perl -0 -pe 's/<script>\s*var\s+i\s+=\s+100\s+var\s+j\s+=\s+200\s+var\s+x\s+=\s+1000\s+<\/script>/<script> var i =100\n         var j =100\n         var x = xxxx <\/script>/g' input-file

或者(更易读):

   perl -0 -pe 's/<script>\s*
    var\s+ i\s+ =\s+ 100\s+
    var\s+ j\s+ =\s+ 200\s+
    var\s+ x\s+ =\s+1000\s+
    <\/script>/<script> var i =100\n         var j =100\n         var x = xxxx <\/script>/gx' input-file

【讨论】:

  • -0777 建议用于 slurping 整个文件...-0 将使用 ASCII NUL 字符作为分隔符,这在这里可能不是问题.. 至少添加一个注释
  • 问题有 linux 标签,所以 -0 技巧可以与 GNU sed 一起使用为 sed -z
  • 有什么方法可以编辑同一个文件? -0 正在将更改打印到标准输出
  • 在perl中,如果要直接修改文件,可以在调用中添加-i
猜你喜欢
  • 2019-01-16
  • 2018-06-05
  • 2014-09-24
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2021-09-23
相关资源
最近更新 更多