批处理或perl重塑txt文件

时间:2011-12-12 15:55:04

标签: perl text batch-file

我想编写一个重新整形文本文件的脚本,如下所示:

word1
word2
word3
word4

word5
word6
word7
word8

word9
word10
word11
word12
...

进入这个:

word1 word2 word3 word4
word5 word6 word7 word8
word9 word10 word11 word12
...

有没有人知道这么做的简单方法?

3 个答案:

答案 0 :(得分:2)

perl -i.bak -pwe 's/\S\s*\K\n$/ /' input.txt
  • -i.bakinput.txt.bak
  • 中保存备份
  • -p在您的脚本周围放置一段时间(<>)循环
  • 正则表达式查找以非空白字符结尾的行 没有后跟空格,接着是换行符并取代了 带空格的换行符。 \K转义意味着“在此之前保留任何内容”。

另一种选择:

perl -i.bak -lpwe 'BEGIN { $/="" }; s/\n/ /g' input.txt

在BEGIN块中使用段落模式,并使用带有-l的换行符跟随每个打印件

答案 1 :(得分:1)

perl -l -00 -aF/\s*\n\s*/ -ne 'print "@F"' /source/file > /dest/file

解释(使用TLP的建议)

  • -l:自动整理记录并使print的行为与say类似。
  • -00:将perl置于“段落模式”,它会查找连续的“\ n \ n”
  • -a:将记录自动拆分为字段数组@F
  • -F:使用以下模式拆分记录(使用自动拆分)。
  • -ne:为每条记录执行以下操作(由“\ n \ n”分隔),仅在告知时打印

答案 2 :(得分:1)

您的群组似乎是“段落”所以请仔细阅读;在空白处分开单词;使用单个空格(空白)重新加入它们并打印结果:

#!/usr/bin/env perl
use strict;
use warnings;
local $/ = '';
my @words;
while (<DATA>) {
    @words = split;
    print join q( ), @words, "\n";
    @words = ();
}
__DATA__
word1
word2
word3
word4

word5
word6
word7
word8

word9
word10
word11
word12