2015-11-03 25 views
-2

尝试下面来完成,包含50000 CHOWN文件中的命令sed将语法包括双引号到最后一个字段

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

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

任何想法请如何做到这一点?

+1

不知道你的意思'最后一个字段不有“”是什么文件'。你能澄清吗? – fedorqui

+1

你有一个文件,上面写着'chown'' user:group''文件名,但是文件名可能包含空格/ etc。但没有适当的引用?你想要引用文件名?无论文件名是什么? –

+0

@Etan,是的,那就是我想要做的。 – jake

回答

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只 “田”。
  • 我们将三个字段连接在一起,并引用'第三'(字段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" 

,可进行一linerified如果你真的想虽然。

喜欢的东西:

perl -lne '@f=split(' ', $_, 3); print join (" ", @f[0,1], "\"".$f[2]."\"")' 
0

徒劳无功的解决方案(假设行要么是不带引号的或正确的引用):

awk '/"$/{print;next} {print gensub(/ /, " \"", 2)"\""}' file 
+0

这是非常密切的,可能需要一些调整,文件名字段开头两个双引号,像这样 CHOWN EME:小人“” GCPB/control_Update_v1(2).P” – jake

+0

当时滚动,我的50 000个名单,这似乎也是这样做 chown est:curs“”./Weekly“Meetings/Archive/CM tm mtg 10-8-13” – jake

+0

啊,没错,我没有说明正确的界限。 –