如何在解析源代码时在sed中打印部分正则表达式匹配?

Per*_*ika 2 regex parsing sed match

我想像这样在正则表达式匹配之间打印部分:

echo "this is foo and another foo quux" | sed 's/this\(.*\)another.*/\1/'
Run Code Online (Sandbox Code Playgroud)

打印

 is foo and
Run Code Online (Sandbox Code Playgroud)

什么是完全正常的,因为我希望在这个与另一个印刷品之间找到一部分.

但是,如果我想解析我的源代码并使用:

cat source_code | sed 's/.*AdulterateFood\(.*\)DangerousFood.*/\1/'
Run Code Online (Sandbox Code Playgroud)

而且我确实知道AdulterateFood和DangerousFood只有一次在源代码中,它仍然打印所有内容,整个文件:(我想知道为什么...... AdulterateFood和DangerousFood在不同的行.

谢谢你的建议.

Ed *_*ton 5

sed默认打印每个输入行.如果您不想要这种行为,则需要添加-n选项.如果您希望它打印与RE匹配的行,则必须在替换命令的末尾添加"p"以告诉sed TO打印该行.所以这:

sed -n 's/.*AdulterateFood\(.*\)DangerousFood.*/\1/p' source_code
Run Code Online (Sandbox Code Playgroud)

似乎是你要求的,但由于你没有提供任何样本输入和预期输出,这只是一个猜测.