sed -n '/aaaa/{:a;n;/zzzz/b;p;ba}'
在上下文中:
echo "aaaa\nsometext\nzzzz\n" | sed -n '/aaaa/{:a;n;/zzzz/b;p;ba}'
打印" sometext ",这是正确的和预期的,但我不理解语法,尽管盯着sed cheatsheet一段时间。
提前致谢!
答案 0 :(得分:1)
sed将当前行读入其模式空间。通常,sed在处理当前行之后打印图案空间。可以使用选项-n
禁用此功能。因此,sed仅使用命令p
输出其模式空间。
仅当sed找到包含某个表达式aaaa
的行时,它才会在curley括号中执行命令。
:a
是名为a
的标签,无效。使用命令n
,sed将下一行输入读入其模式空间。 aaaa
在模式空间中被覆盖。如果模式空间现在包含表达式zzzz
执行命令b
并分支到脚本结束并结束执行。如果模式空间不包含表达式zzzz
执行p
(打印模式空间)并执行命令ba
(跳转到标签a
)。然后使用命令n
...