如何匹配分布在两行之间的一组字符串?

时间:2019-04-09 14:31:28

标签: shell awk grep

我有一个文件,在任何一种组合中都可能包含以下代码块。我需要检查文件中是否存在“导入遥测”。

  1. 导入遥测{ 前缀tm; }
  2. 导入遥测{ 前缀tm; }
  3. 导入

    遥测{    前缀tm;  }

我的代码:

#!/bin/sh

if grep -Eq "import\s+telemetry"  "./xyz.yang";
    then
      echo "This is a telemetry yang"
    else
      echo "This is a normal yang"
fi

上面的方法适用于1和2,但不适用于3。

我尝试了以下操作,但是它很贪心,并且也会匹配“ import blah blah .. telemetry”。

if awk '/import/,/telemetry/' "./xyz.yang";

有什么建议吗?

我的解决方案:

#!/bin/sh
    if grep -Pzq 'import[ \n\r\t]+telemetry' './xyz.yang';
        then
          echo "This is a telemetry yang"
        else
          echo "This is a normal yang"
    fi

1 个答案:

答案 0 :(得分:-1)

向grep添加-z标志,它将起作用。

#!/bin/sh

if grep -Eqz "import\s+telemetry"  "./xyz.yang";
    then
      echo "This is a telemetry yang"
    else
      echo "This is a normal yang"
fi