2015-11-03 24 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

啊,沒錯,我沒有說明正確的界限。 –