有人可以向我解释这个sed命令吗?

时间:2017-07-10 18:36:19

标签: sed

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一段时间。

提前致谢!

1 个答案:

答案 0 :(得分:1)

sed将当前行读入其模式空间。通常,sed在处理当前行之后打印图案空间。可以使用选项-n禁用此功能。因此,sed仅使用命令p输出其模式空间。

仅当sed找到包含某个表达式aaaa的行时,它才会在curley括号中执行命令。

:a是名为a的标签,无效。使用命令n,sed将下一行输入读入其模式空间。 aaaa在模式空间中被覆盖。如果模式空间现在包含表达式zzzz执行命令b并分支到脚本结束并结束执行。如果模式空间不包含表达式zzzz执行p(打印模式空间)并执行命令ba(跳转到标签a)。然后使用命令n ...

重新开始