如何使用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