【发布时间】:2013-06-12 18:03:51
【问题描述】:
从著名的“sed one liners”中找到以下 sed 脚本来反转每一行中的字符,但我无法在脚本的 //D 中执行以下命令
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
假设初始文件有两行以say开头,
apple
banana
在第一个命令之后,
/\n/!G
模式空间是,
apple
banana
[在每一行之后引入一个新行。代码标记在此处删除最后一个新行。所以没有显示]。 在第二个命令之后,
s/\(.\)\(.*\n\)/&\2\1/
模式空间是,
apple
pple
a
banana
anana
b
第三个命令在这之后如何工作?另外,我知道empty regular expression(//) 匹配之前匹配的正则表达式。但在这种情况下,那会是什么? \n 来自第一个命令还是被第二个命令替换的正则表达式?任何帮助将非常感激。谢谢。
【问题讨论】:
-
我建议进行 2 次编辑:在顶部的脚本中将
;替换为换行符,以便每个命令位于单独的行上,这样会更清晰。在每个命令之后的中间状态中,将嵌入模式空间中的换行显示为¶,以将它们与输入中已经存在的换行区分开来(也可以解决代码标记问题)