2017-07-10 153 views
-2

sed -n '/aaaa/{:a;n;/zzzz/b;p;ba}'有人可以向我解释这个sed命令吗?

在背景:

echo "aaaa\nsometext\nzzzz\n" | sed -n '/aaaa/{:a;n;/zzzz/b;p;ba}'

打印 “sometext”,这是正确的预期,但我不明白的语法,尽管在一个sed的cheatsheet凝视了一会儿。

提前致谢!

+2

欢迎来到StackOverflow。不幸的是,这既不是免费的咨询/设计/编码或调试服务,教程网站也不是网络搜索替代品。我们可以帮助解决[某些问题](https://stackoverflow.com/help/on-topic),但它是**你的**工作** [付出一些努力](http://meta.stackoverflow.com/questions/261592)**,包括初级** [(重新搜寻)](https://google.com/)* –

+0

嗯。在我的mingw控制台中不适用于我。 –

+0

应该从字面上搜索如何使用'sed'命令以及如何在您的示例中解释替换字符串的数千个示例。 –

回答

1

sed将当前行读入其模式空间。通常,sed会在处理完当前行后打印模式空间。这可以通过选项-n禁用。因此,sed只能使用命令p输出它的模式空间。

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

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

相关问题