2009-11-06 24 views
2

末我有類似蟒蛇或bash - 添加「的線的開始」,在線

first line 
line nr 2 
line three 

文本文件,我想生成

"first line", 
"line nr 2", 
"line three", 

我想知道如何在Python中或者在bash中做到這一點,如果它更容易/更快。我知道有不同的代碼打開文件和不同的只讀一行python(?),但我不知道在這種情況下使用哪個選項,更重要的是,如何添加這些字符。任何建議都會有幫助。

+0

你要什麼與輸出呢?把它放在編程語言的列表變量中?將其打印到屏幕上?把它寫回文件? – oggy 2009-11-06 17:08:47

+0

要麼回寫到文件,要麼打印到屏幕......我以後想要複製並粘貼到其他地方,所以回寫到同一個文件或打印到screem都沒有問題,只要我可以稍後有效地複製和粘貼它'手動' – Phil 2009-11-06 17:12:57

回答

4

一些簡單的方法來做到這一點...

一個簡單的Perl oneliner:

perl -pi -e 's/^(.*)$/\"$1\",/g' /path/to/your/file 

要解釋一下,正則表達式^(.*)$抓住的開始之間的一切(的(.*)) (^)和行末($),然後使用$1匹配組變量使用引號和逗號重新構建它。

+0

...在哪裏輸出它?到這個文件或屏幕? – Phil 2009-11-06 17:15:00

+0

它被內聯編輯,所以文件應該改變。 – jsoverson 2009-11-06 17:15:43

+1

'perl -pli -e'$ _ = qq {「$ _」}「'也可以完成這項工作。 – mob 2009-11-06 17:31:05

6

供參考,以防有人想用python做同樣的事情。有一個方便的模塊fileinput,可以這樣使用:

import fileinput 
import sys, os 

for line in fileinput.input(inplace=True): 
    sys.stdout.write('"%s",%s' % (line.rstrip(os.linesep), os.linesep)) 

然後運行這是一個腳本:

python myscript.py file1 file2 file3 

,這將改變文件就地爲您服務。

+1

這就是精神,爲什麼在使用python的時候使用gnu! +1非常方便的文件輸入模塊。 – RedGlyph 2009-11-06 17:22:39

6

是一個真正的unix怪胎:使用sed!

sed 's/^/"/; s/$/",/;' < your_text_file 

如果你想逃避現有的雙引號反斜槓,使用's/"/\\"/g; s/^/"/; s/$/",/;'爲圖案。

sed非常適合這種類型的任務。檢查一個可笑的長list of examples

+2

不需要重定向,'sed'接受文件名作爲參數。 – 2009-11-06 17:53:26

8
sed 's/.*/"&",/' 
+0

我想你想在引號後面移動逗號;除此之外,整潔的答案! – 2009-11-06 20:23:14

+0

'sed's /.*/"&",//'input_file | xclip' – jfs 2009-11-07 00:11:18

0

SH + AWK很不錯這裏太...

!/bin/sh 
for FILE in "[email protected]" 
do 
    awk '{print "\" $0 "\","}' < $FILE > $FILE.tmp 
    mv $FILE.tmp $FILE 
done 
+0

'awk'將接受輸入文件作爲命令行參數而不進行重定向。 – 2009-11-06 18:05:55

1

在bash:

while read line 
    do 
    echo "\"${line}\"," 
done < inputfile 
5

沒有必要構建正則表達式(與逆向引用)完成這個任務。這是一項昂貴的操作,因爲你不會改變線路中的某些東西。最簡單的方法就是將它們打印出來。

awk '{print "\042"$0"\042,"}' file 

結果在操作上了一個大文件:

$ head -5 file 
this is line 
this is line 
this is line 
this is line 
this is line 
$ wc -l < file 
9545088 

$ time awk '{print "\042"$0"\042,"}' file >/dev/null 

real 0m15.574s 
user 0m15.327s 
sys  0m0.172s 

$ time sed 's/.*/"&",/' file > /dev/null 

real 0m31.717s 
user 0m31.465s 
sys  0m0.157s 

$ time perl -p -e 's/^(.*)$/\"$1\",/g' file >/dev/null 

real 0m36.576s 
user 0m36.006s 
sys  0m0.360s 
0

在六:

:%s/^\(.*\)$/"\1",/g 
1

的Python

for line in open("file"): 
    line=line.strip() 
    print '"%s",' % line