【发布时间】:2019-01-22 11:40:44
【问题描述】:
我有一个如下所示的输入:
1
2
3
4
5
6
我想用 sed 将其转换为:
12
345
6
我知道它可以使用其他工具轻松完成,但我想专门使用 sed 作为学习练习来完成它。 我已经尝试过:
sed ':x ; /^ *$/{ N; s/\n// ; bx; }'
但它会打印:
123456
有人可以帮我解决这个问题吗?
【问题讨论】:
-
可能是这样的:
s/\n([^\n])/\1/? -
wrt
I want to do it specifically with sed as a learning exercise- 一个令人钦佩的目标,但你将学习如何做一些你永远不应该做的事情,那么重点是什么? -
是的,但是 sed 唯一最适合的就是
s/old/new在单独的行上,你不需要很多经验来学习如何做到这一点。大约 40 年前,所有用于执行其他任何操作(例如 this)的 sed 语言结构实际上已经过时了。那么,为什么不学习简单、健壮、高效、可移植、可维护的方法来使用标准 UNIX 工具完成所有工作,而不是学习如何编写神秘的 sed 脚本,如果你把分号放在错误的位置,可能会调用黑暗之神 Cthulu? -
@EdMorton 哈哈哈。我必须承认我笑了。这只是自我提升的问题。 Sed 语法笨拙且过时(如 Perl),但即使出于历史原因,也值得学习。
-
是的,我想我们都对金字塔是如何建造的很感兴趣,但这并不意味着任何人很快就会在他们的后院建造金字塔。只要你没有真正发现自己在你的真实软件中使用它,我想知道一些 sed 咒语没有什么坏处......
标签: sed