如何在Linux中编辑文件并添加换行符?

时间:2013-10-29 20:25:09

标签: linux

这是输入

R0001 893573.56035613.416.60002 893580.06035624.316.80003 893586.56035635.116.91
R0004 893593.06035646.017.00005 893599.46035656.917.00006 893605.96035667.817.01

我想要这个

R0001 893573.56035613.416.6
0002 893580.06035624.316.8
0003 893586.56035635.116.91
R0004 893593.06035646.017.0
0005 893599.46035656.917.0
0006 893605.96035667.817.01

我使用linux centos 5.4

2 个答案:

答案 0 :(得分:1)

假设您的数据位于名为“file”的文件中:

sed -i 's/^\(.\{27\}\)\(.\{26\}\)\(.*\)/\1\n\2\n\3/g' file

sed是一个非常强大的文本处理工具,虽然不是最容易使用的(但是当你想做这样的例子时非常容易)。 这是魔术:

“ - 我”是“为我做这件事”的标志 在单引号中有一条指令,包含由斜线分隔的四个部分: 1.命令:“s” - 替代 2.模式:想要改变什么 3.预期结果:您希望它看起来如何 4.范围:“g” - 全球

模式是

\(.\{27\}\)\(.\{26\}\)\(.*\)

表示“在一行中创建一组前27个字符,然后再创建另外26个字符的组,然后在该行中创建所有剩余字符的第一组”。

预期结果是

\1\n\2\n\3

表示“粘贴组1,粘贴新行,粘贴组2,粘贴新行,粘贴组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/

答案 1 :(得分:0)

如果您的输入是在 in.txt 中定义的,则可能的解决方案可能是:

#!/usr/bin/perl
use strict;
use warnings;

open ( FILE, "<", "in.txt") or die $!;
while (my $line = <FILE>) {

my $tmp = join("\n", unpack("(A53)*", $line));
my $message = join("\n", unpack("(A27)*", $tmp));
print "$message\n";

}
close(FILE);

我不认为这是最好的解决方案,因为它不适用于长线。但我在Perl中试了一下。