可以说我有以下几行:
1:a:b:c
2:d:e:f
3:a:b
4:a:b:c:d:e:f
我如何使用 sed (或 perl)编辑它以便阅读:
1a1b1c
2d2e2f
3a3b
4a4b4c4d4e4f
我已经用 awk 完成了这样的操作:
awk -F':' '{gsub(/:/, $1, $0); print $0}'
但需要很长时间才能完成!所以寻找更快的东西。
这有点棘手,但可以通过sed
(假设文件data
包含示例输入):
$ sed '/^\(.\):/{
s//\1/
: retry
s/^\(.\)\([^:]*\):/\1\2\1/
t retry
}' data
1a1b1c
2d2e2f
3a3b
4a4b4c4d4e4f
$
您可以使用分号将脚本扁平化为一行;sed
在MacOS X上有时有点暴躁并且反对某些部分,所以它被分成6行。第一行匹配以单个字符和冒号开头的行,并在识别时启动一系列操作。例如,第一个替换仅将“1:”替换为“1”。这: retry
也是分支的标签 - 这是其中的关键部分。下一个替换将行上的第一个字符复制到第一个冒号上。这t retry
如果替代品改变了任何内容,则返回标签。最后一行界定了最初匹配行的整个操作序列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)