【发布时间】:2013-01-09 01:25:17
【问题描述】:
我发布了this question,有人回答了这个
sed '/^void.*{$/!b;:a;/\n}$/bb;$!{N;ba};:b;s/\n/&test1&/;s/\(.*\n\)\(.*\n\)/\1test2\n\2/' file
我是 sed 和正则表达式的新手,无法理解每个部分的功能。
我将尝试解释我所理解的内容,你们可以填补缺失的东西。我会一个字一个字地去
-
^void.*{$-- 这意味着任何以void开头并以{结尾的东西 -
/!b;我不明白这是做什么的。现在b是branching。/在那里做什么 -
:a;用于制作标签a -
/\n又没看懂/那里 -
}$以}结尾 -
/bb我不明白 -
$!表示如果不是文件结尾 -
{N;没有明白它的意思,N 表示复制缓冲区中的下一行但确实得到了{ -
:b没听懂。 b 用于分支,但不知道它在那里做什么 10.s/\n/&test1&/我认为它用\ntest1\n替换 \n 但不确定 -
s/\(.*\n\)\(.*\n\)/\1test2\n\2/这个也别买了
【问题讨论】:
-
看起来回答你问题的人添加了an explanation。
-
他在组中添加了解释,我什至不明白。我想逐个字符地理解
-
sed 是在单行上进行简单替换的出色工具,但对于其他任何事情,您应该使用 awk 代替。我已经使用 sed 30 年了,甚至无法猜测您发布的命令在做什么。如果您发现自己使用的不仅仅是“s”和“g” sed 命令,那么您可能使用了错误的工具,所以不要在这些东西上浪费您的时间,只需获得一个 awk 解决方案,它会更清晰、更简单和将来更容易增强。
-
@Ed Morton,我以前使用过 awk,但人们一直说使用 sed。真的,我无法区分何时使用什么。我现在将发布新问题(如果那没有关闭”),以便了解何时使用什么
-
@user1953864 - 使用 sed 解决中等复杂问题的吸引力与解决难题的吸引力相同。如果你能弄清楚标点符号和字母的正确神秘组合,那么你会自我感觉良好,并且进行了良好的心理锻炼,但最终你什么也没做。有关 sed 何时是正确使用工具的具体建议,请参阅我之前的评论。