Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Bash 打印包含特定字符串的两个图案之间的所有行_Bash_Shell_Scripting_Awk - Fatal编程技术网

Bash 打印包含特定字符串的两个图案之间的所有行

Bash 打印包含特定字符串的两个图案之间的所有行,bash,shell,scripting,awk,Bash,Shell,Scripting,Awk,我试图打印任何文本之间存在的两个不同的模式也与此模式。但仅当模式之间的文本包含特定字符串[使用awk,flag…]时 我的输入文件: START 12.5 elephant dasnbjdai adfad s = ad cat da 524a das da 54e dog dada 455ad7 da 45d cow 554s7e END START fjs 4 rhino das 452 da da = cat da gd das_

我试图打印任何文本之间存在的两个不同的模式也与此模式。但仅当模式之间的文本包含特定字符串[使用awk,flag…]时

我的输入文件:

START 12.5 elephant dasnbjdai adfad
      s = ad cat da 524a das
      da 54e dog dada 455ad7
      da 45d cow 554s7e
END
START fjs 4 rhino das 452 da
      da = cat da gd 
      das_d pig das 
      4524s dda monkey dasdc4
END 
START da dfsdg cow
      bear dac45
      lion bla bla 
      5as4 fox bla fa jsa
END
START dandsk cow  dada
      bla sheep bla
      fsgv turtle fsd
      da dragon da
END
START
      daadas pig fsv45 
      dasd walrus das 52
END
我的输出应该是[只显示开始…结束之间的行,但包含cat]

START 12.5 elephant dasnbjdai adfad
      s = ad **cat** da 524a das
      da 54e dog dada 455ad7
      da 45d cow 554s7e
END
START fjs 4 rhino das 452 da
      da = **cat** da gd 
      das_d pig das 
      4524s dda monkey dasdc4
END 
如何打印,即所有包含龙和海象的行

输出

START dandsk cow  dada
      bla sheep bla
      fsgv turtle fsd
      da dragon da
END
START
      daadas pig fsv45 
      dasd walrus das 52
END

带awk的单向开关:

awk -v RS="END" '$0~/cat/{print $0 RS}' input 
第二种情况:

awk -v RS="END" '$0~/walrus|dragon/{print $0 RS}' input 
如果您不希望中间有空行,则:

awk 'BEGIN{RS="END";ORS=""}$0~/dragon|walrus/{print $0 RS}END{print "\n"}' input
使用GNU awk(将RS设置为多个字符):

或:


你努力写了吗?
$ gawk 'BEGIN{RS=ORS="\nEND\n"} /dragon|walrus/' file
START dandsk cow  dada
      bla sheep bla
      fsgv turtle fsd
      da dragon da
END
START
      daadas pig fsv45
      dasd walrus das 52
END
$ awk -v re="dragon|walrus" 'BEGIN{RS=ORS="\nEND\n"} $0~re' file
START dandsk cow  dada
      bla sheep bla
      fsgv turtle fsd
      da dragon da
END
START
      daadas pig fsv45
      dasd walrus das 52
END