批处理或perl重塑txt文件
我想编写一个脚本,重新塑造文本文件的形状,如下所示:批处理或perl重塑txt文件,perl,text,batch-file,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 ... 有人知道这样做的简单方法吗 perl -l -00 -aF/\s*\n\s*/ -ne 'print "@F"'
word1
word2
word3
word4
word5
word6
word7
word8
word9
word10
word11
word12
...
为此:
word1 word2 word3 word4
word5 word6 word7 word8
word9 word10 word11 word12
...
有人知道这样做的简单方法吗
perl -l -00 -aF/\s*\n\s*/ -ne 'print "@F"' /source/file > /dest/file
说明(使用TLP的建议)
- -l:自动咀嚼记录并使
表现得像打印
说
- -00:将perl置于“段落模式”,并查找连续的“\n\n”
- -a:自动将记录拆分为字段数组
@F
- -F:使用以下模式拆分记录(使用自动拆分)
- -ne:对每条记录执行以下操作(以“\n\n”分隔),仅在被告知时打印
- -l:自动咀嚼记录并使
表现得像打印
说
- -00:将perl置于“段落模式”,并查找连续的“\n\n”
- -a:自动将记录拆分为字段数组
@F
- -F:使用以下模式拆分记录(使用自动拆分)
- -ne:对每条记录执行以下操作(以“\n\n”分隔),仅在被告知时打印
#!/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
#/usr/bin/env perl
严格使用;
使用警告;
本地$/='';
我的文字;
而(){
@文字=分裂;
打印join q(),@words,“\n”;
@单词=();
}
__资料__
字1
字2
字3
字4
字5
字6
字7
字8
字9
字10
字11
字12
看来你的小组是“段落”,所以就这样读吧;在空白处拆分单词;使用单个空格(空白)重新加入并打印结果:
#!/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
#/usr/bin/env perl
严格使用;
使用警告;
本地$/='';
我的文字;
而(){
@文字=分裂;
打印join q(),@words,“\n”;
@单词=();
}
__资料__
字1
字2
字3
字4
字5
字6
字7
字8
字9
字10
字11
字12
将备份保存在-i.bak
input.txt.bak
在脚本周围放置一个while()循环-p
- 正则表达式查找以非空白字符结尾的行
不后跟空格,后跟换行符并替换
带空格的换行符。
转义的意思是“在此之前保留任何内容”\K
perl -i.bak -lpwe 'BEGIN { $/="" }; s/\n/ /g' input.txt
在开始块中使用段落模式,并在每次打印后换行-l
将备份保存在-i.bak
input.txt.bak
在脚本周围放置一个while()循环-p
- 正则表达式查找以非空白字符结尾的行
不后跟空格,后跟换行符并替换
带空格的换行符。
转义的意思是“在此之前保留任何内容”\K
perl -i.bak -lpwe 'BEGIN { $/="" }; s/\n/ /g' input.txt
在BEGIN块中使用段落模式,在每次打印后使用带有
-l
的换行符,一个不长的可读脚本会很好:)-l
不仅会选择输入,还会在打印
中添加一个换行符。此外,还可以查看-a
和-F
;)TLP是对的,如果-l
已经存在,那么就不需要说,这是一个有趣的解决方案。我没有意识到-00
是段落模式,但它也必须做一些其他的事情,因为-00-lpwe的/\n//g'
不会给出与-lpwe'BEGIN{$/=“”]相同的结果;s/\n//g;'似乎perl-l-00
给出了正确的结果,但是perl-00-l
添加了一个额外的换行符。这意味着-l
将添加到现有的$\
,而不是覆盖它。一个不长的可读脚本会很好:)-l
不仅会选择输入,还会在打印中添加新行。此外,还可以查看-a
和-F
;)TLP是对的,如果-l
已经存在,那么就不需要说,这是一个有趣的解决方案。我没有意识到-00
是段落模式,但它也必须做一些其他的事情,因为-00-lpwe的/\n//g'
不会给出与-lpwe'BEGIN{$/=“”]相同的结果;s/\n//g;'似乎perl-l-00
给出了正确的结果,但是perl-00-l
添加了一个额外的换行符。这意味着-l
将添加到现有的$\
而不是覆盖它。对于包含空格的行不起作用。例如“word1 word2\n…”。它可以工作,但它会用空格替换任何空格,最好是在\n
上进行拆分。对于包含空格的行不起作用。例如“word1 word2\n…”。它会起作用,但它会用空格替换任何空格,最好是在\n
上进行拆分。这是我第一次看到\K
标志起作用。这样就不需要可变长度-lookbehind@Zaid它与lookbehind Nice位于同一位置。与许多Perl特性一样,这个小金块对于know@Zaid我想知道为什么不支持可变长度查找。这是我第一次看到\K
标志起作用。这样就不需要可变长度-lookbehind@Zaid它与lookbehind Nice位于同一位置。与许多Perl特性一样,这个小金块对于know@Zaid我想知道为什么不支持可变长度查找。