假设您的数据位于名为“file”的文件中:
sed -i 's/^\(.\{27\}\)\(.\{26\}\)\(.*\)/\1\n\2\n\3/g' file
sed 是一个非常强大的文本处理工具,虽然不是最容易使用的(但是当你想制作这样的例子时非常容易)。这是魔术:
“-i”是单引号中“为我做这些事情”的标志,有一条指令由斜杠分隔的四个部分组成:1.命令:“s” - 替换 2.模式:想要改变什么 3.预期结果:您希望它看起来如何 4. 范围:“g” - 全局
模式是
\(.\{27\}\)\(.\{26\}\)\(.*\)
这意味着“在一行中制作一组前 27 个字符,然后制作另一组接下来的 26 个字符,然后制作第一组该行中所有剩余字符的组”。
预期的结果是
\1\n\2\n\3
意思是“粘贴第一组,粘贴新行,粘贴第二组,粘贴新行,粘贴第三组”。
为了更清楚,您可以将其放在脚本中:
#!/bin/bash
COLUMN1=27
COLUMN2=26
FILENAME="file"
sed -i "s/^\(.\{$COLUMN1\}\)\(.\{$COLUMN2\}\)\(.*\)/\1\n\2\n\3/g" file
exit 0
要使脚本打开任何文件编辑器(我使用 vim,其他选项是 emacs、nano、kwrite、kate、geany、gedit ......我可以整天这样)并粘贴上面的代码。保存,关闭编辑器并发出
chmod +x script
能够执行它。你调用脚本
./script
现在您可以为脚本提供参数,检查“文件”是否存在,添加更多断点……但那是另一回事了。
然后你可以使用不同的工具,比如 awk(我强烈推荐,但我在 vim 中编写时通常使用正则表达式,并且 sed 更像 vim 而不是 awk,所以我觉得它更舒服)。
更多阅读:
http://www.brunolinux.com/02-The_Terminal/Find_and%20Replace_with_Sed.html
http://www.grymoire.com/Unix/Sed.html
http://www.hcs.harvard.edu/~dholland/computers/awk.html
http://www.regular-expressions.info/