2

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

echo "this is foo and another foo quux" | sed 's/this\(.*\)another.*/\1/'

哪个打印

 is foo and

什么是完全可以的,因为我想在这个和另一个打印之间得到一部分。

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

cat source_code | sed 's/.*AdulterateFood\(.*\)DangerousFood.*/\1/'

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

谢谢你的建议。

4

2 回答 2

5

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

sed -n 's/.*AdulterateFood\(.*\)DangerousFood.*/\1/p' source_code

似乎是您要的,但是由于您没有提供任何示例输入和预期输出,因此这只是一个猜测。

于 2012-12-30T11:25:02.813 回答
1

要打印 AdulterateFood 和 Dangerous food 之间的所有行:

sed -n '/AdulterateFood/,/DangerousFood/p' file
于 2012-12-30T10:21:13.650 回答