Bash,选择特定匹配包围的文本

时间:2014-11-26 15:27:41

标签: bash sed grep

我需要做的是打印出在特定比赛后开始并在另一场比赛前结束的文字。

假设我有一个很大的输出,我只需要打印从'$$$$$$$$$$'行开始并在行''前面结束的文本((((((((((((哦,文件可能没有'((((((((((('行',在这种情况下,我仍然需要'$$$$$$$$$$'后的文本,直到输出结束)。
我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以使用sed

sed -e '/\$\{10\}/,/(\{9\}/!d' inputfile

要排除边界线,您必须进行一些编程:

sed -ne '/\$\{10\}/ {n;b c}; d;:c {/(\{9\}/ {d};p;n;b c}' inputfile

答案 1 :(得分:0)

您可以使用awk

awk '/START/{f=1;next} /END/{f=0} f' file

您可以将start stop设置为您喜欢的内容。

cat file

test
$$$$$$$$$$
more
data
(((((((((
stop

awk '/\$\$\$\$\$\$\$\$\$\$/{f=1;next} /\(\(\(\(\(\(\(\(\(/{f=0} f' t
more
data

由于$(是特殊字符,因此您需要将其转义。