尝试在下面完成,包含50,000个chown命令的文件
chown eme:curs "GCPB/control_Update_v1 (2).p"
文件中的最后一个字段没有""
,我需要这样才能确保命令正确完成。
任何想法请问如何实现这个目标?
答案 0 :(得分:1)
我猜你是否正在谈论对其中包含空格的文件执行一系列命令,因此需要引用。
这样的事情会做到:
#!/usr/bin/env perl
use strict;
use warnings;
#<> reads stdin or files specified on command line, like sed/grep
while ( my $line = <> ) {
#remove trailing linefeed
chomp ( $line );
#split on whitespace - 3 fields limit.
my @fields = split ( ' ', $line, 3 );
#stick them back together again, including quotes.
print join ( " ", @fields[0,1], '"'.$fields[2].'"' ),"\n";
}
所以输入:
chown eme:curs GCPB/control_Update_v1 (2).p
chown eme:curs some-other file
这给了我们:
chown eme:curs "GCPB/control_Update_v1 (2).p"
chown eme:curs "some-other file"
如果你真的想要的话,可以是单人。
类似的东西:
perl -lne '@f=split(' ', $_, 3); print join (" ", @f[0,1], "\"".$f[2]."\"")'
答案 1 :(得分:0)
一个gawk解决方案(假设行没有引用或正确引用):
awk '/"$/{print;next} {print gensub(/ /, " \"", 2)"\""}' file