Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用awk匹配以下两行?_Awk - Fatal编程技术网

如何使用awk匹配以下两行?

如何使用awk匹配以下两行?,awk,Awk,应转换为 - ../logs/nginx:/var/log/nginx env_file: - ../env/uid.env 文件中多次出现“env_file”,因此我也需要匹配上面的行。我在为新线而挣扎。我试过了 - ../logs/nginx:/var/log/nginx env_file: - ../env/nginx.env - ../env/uid.env 这是可行的,但不包括上面的那一行。然后我试过这个,

应转换为

      - ../logs/nginx:/var/log/nginx
    env_file:
      - ../env/uid.env
文件中多次出现“env_file”,因此我也需要匹配上面的行。我在为新线而挣扎。我试过了

      - ../logs/nginx:/var/log/nginx
    env_file:
      - ../env/nginx.env
      - ../env/uid.env
这是可行的,但不包括上面的那一行。然后我试过这个,但没用

awk '/    env_file:/{print;print "      - ../env/nginx.env";next}1' filename

编辑:以澄清我的问题。我无法使用第一次尝试,因为我的文件中多次出现“env_file”。我需要匹配上面的另一行(包含“nginx”的行)。这就是我正在努力解决的问题。

如果要匹配两行的块,可以使用“flag”变量,该变量在块的第一行匹配时设置

awk '/nginx\n    env_file:/{print;print "      - ../env/nginx.env";next}1' filename

我已经对您在gawk 5.0.0中提供的输入进行了第一次测试,测试结果与您描述的一样。我不明白你的问题是什么。你能详细说明一下吗?PS:您可以删除正则表达式比较中的空格,我认为
/env_file/
据我所知,OP希望匹配一个由两行组成的块,第一行包含
nginx
,第二行
envfile:
。我想他应该问清楚这个问题。这回答了你的问题吗@卡西莫多,是的,现在我在这种光线下阅读这个问题,它就更有意义了。尽管如此,我相信这是一个重复的问题。
awk '
  1
  /nginx/{flag=1;next}
  flag==1 && /    env_file:/{flag=0;print "      - ../env/nginx.env"}
  flag=0
' filename