Answers:
似乎您想在' Word A
'和' Word D
'(包括两端)之间打印行。我建议您使用sed
代替grep
。它使您可以编辑一系列输入流,该输入流以所需的模式开始和结束。您应该只告诉sed
打印范围内的所有行,而不要打印其他行:
sed -n -e '/Word A/,/Word D/ p' file
| sed -e '1d;$d'
,即删除第一行和最后一行
sed -n -e '/pattern A/,/pattern D/d; p'
说:“从模式A删除到模式D,然后打印其他所有内容”。不幸的是,这场比赛是贪婪的。这意味着,如果模式A和D出现不止一次,则您将从第一个模式A 匹配到最后一个模式D。如果是这种情况,恐怕Perl或Python是您的朋友。
为什么不使用awk?
awk '/Word A/,/Word D/' filename
Word D
落在同一行Word A
,并且可能在其他地方(例如Word A Word D\nWord D
sed)将显示两行,而awk将显示一行,则awk更好。另外,仍然可以将awk与变量一起使用,例如awk -v _word="Word A" '$0 ~ _word,/Word D/' "/some/file"
,这样sed可能会更有效,但是当处理两个字符串的搜索可能或可能不在同一行时,awk绝对更可靠。
A
和的序列的情况,B
而您只想捕获每个此类序列之间的内容。看来sed至少在我看来并没有遵循这些语义。