在模式之间打印一切

时间:2013-12-06 20:28:40

标签: awk grep pattern-matching

我想在两条与特定图案匹配的线条之间打印所有内容。例如,如果我的输入文件看起来像

--- START ---
line 1
line 2
--- END ---

我想输出

line 1
line 2

可以这样做(例如使用grep或awk吗?)

4 个答案:

答案 0 :(得分:1)

你可以做到

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

awk '/--- END ---/{exit}; flag {print}; /--- START ---/{flag=1} ' < input

答案 1 :(得分:1)

这是使用awk

的方法
awk '/END/{f=0} f; /START/{f=1}' file.txt
line 1
line 2

您应该可以使用Google轻松找到解决方案。

另一个版本:

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

答案 2 :(得分:0)

以下是一个使用awkgrep的简单解决方案:

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

答案 3 :(得分:0)

使用

perl -0777 -ne 'print $1 if /^--- START ---\s*\n(.*?)--- END ---/s' file