Awk 打印图案之间的所有内容

Awk 打印图案之间的所有内容,awk,grep,pattern-matching,perl,Awk,Grep,Pattern Matching,Perl,我想在两行之间打印符合特定图案的所有内容。例如,如果我的输入文件 --- START --- line 1 line 2 --- END --- 我想把它作为输出 line 1 line 2 可以这样做吗(例如使用grep或awk?您可以这样做 sed -n '/--- START ---/,/--- END ---/{/--- START ---\|--- END ---/!p}' < input sed-n'/--START-/,/--END-/{/--START-\\\\\\

我想在两行之间打印符合特定图案的所有内容。例如,如果我的输入文件

--- START ---
line 1
line 2
--- END ---
我想把它作为输出

line 1
line 2
可以这样做吗(例如使用grep或awk?

您可以这样做

sed -n '/--- START ---/,/--- END ---/{/--- START ---\|--- END ---/!p}'  < input
sed-n'/--START-/,/--END-/{/--START-\\\\\\--END-/!p}'

awk'/--END---/{exit};标志{print};/--开始---/{flag=1}'<输入

这里有一个使用
awk
grep
的简单解决方案:

awk '/-- START ---/,/--- END ---/ {print $0}' file.txt \
| grep -v -- '--- START ---' \
| grep -v -- '--- END ---'

这是如何使用
awk

awk '/END/{f=0} f; /START/{f=1}' file.txt
line 1
line 2
你应该很容易找到解决这个问题的方法

另一个版本:

awk '/START/{f=1;next} /END/{f=0} f' file.txt
line 1
line 2
使用:


如果所有数据都在一行上,这是否仍然有效?如果所有数据都在一行上,则需要使用
for
循环并测试每个字段。如果您想了解如何使用示例数据以及您喜欢您的输出,请在此发布一个新问题。谢谢。Perl似乎在slurp模式下立即解决了这个问题(由“Perl-0777”表示)
awk '/START/{f=1;next} /END/{f=0} f' file.txt
line 1
line 2
perl -0777 -ne 'print $1 if /^--- START ---\s*\n(.*?)--- END ---/s' file