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

Bash,选择由特定匹配项包围的文本,bash,sed,grep,Bash,Sed,Grep,我需要做的是打印出文本,文本在特定匹配之后开始,在另一个匹配之前结束 假设我有一个大的输出,我只需要打印从“$$$$$$$$”行之后开始到第行之前结束的文本。哦,文件可能没有行结束,在这种情况下,我仍然需要“$$$$$$$$$”之后的文本,直到输出结束。 我该怎么做 您可以使用sed: 要排除边界线,必须进行一些编程: sed -ne '/\$\{10\}/ {n;b c}; d;:c {/(\{9\}/ {d};p;n;b c}' inputfile 你可以用awk 您可以将“开始-停止”设

我需要做的是打印出文本,文本在特定匹配之后开始,在另一个匹配之前结束

假设我有一个大的输出,我只需要打印从“$$$$$$$$”行之后开始到第行之前结束的文本。哦,文件可能没有行结束,在这种情况下,我仍然需要“$$$$$$$$$”之后的文本,直到输出结束。 我该怎么做

您可以使用sed:

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

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

您可以将“开始-停止”设置为您喜欢的

cat文件

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

由于$and是特殊字符,您需要对其进行转义。

举个例子会更好。匹配是否包含新行字符?忽略大部分讨论,只需找到有问题的最后一个代码段,并使用它来实现您想要的功能。这就是我要寻找的答案!我很好奇,那是什么意思!结尾处的d代表?d代表删除!意思不是这样。因此,打印地址范围内的行,否则删除。
awk '/START/{f=1;next} /END/{f=0} f' file
test
$$$$$$$$$$
more
data
(((((((((
stop
awk '/\$\$\$\$\$\$\$\$\$\$/{f=1;next} /\(\(\(\(\(\(\(\(\(/{f=0} f' t
more
data