sed语法在最后一个字段中包含双引号

时间:2015-11-03 13:53:11

标签: shell unix sed

尝试在下面完成,包含50,000个chown命令的文件

chown eme:curs "GCPB/control_Update_v1 (2).p"

文件中的最后一个字段没有"",我需要这样才能确保命令正确完成。

任何想法请问如何实现这个目标?

2 个答案:

答案 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";
}
  • 我们在空格上分开,但指定只有3&#34;字段&#34;。
  • 我们将这三个领域联合起来,并引用第三个字段&#39; (字段2,因为数组基于perl为零)。

所以输入:

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