2009-10-24 22 views
18

我有一個包含空格的目錄列表。用引號括起文本文件中的所有行('something')

我需要用''來包圍它們以確保我的批處理腳本能夠正常工作。

如何用'和a'(引號)圍住每一個新行。

例如

文件1:

/home/user/some type of file with spaces 
/home/user/another type of file with spaces 

文件2:

'/home/user/some type of file with spaces' 
'/home/user/another type of file with spaces' 
+0

你需要在字符串中引用撇號嗎? – 2009-10-24 00:29:32

+0

沒有隻是在字符串周圍。你知道 - 所以我的腳本在遇到有空間的路徑時不會失敗。 – user191960 2009-10-24 00:30:27

回答

28

用sed?

sed -e "s/\(.*\)/'\1'/" 

或如下面評論說,如果目錄中可能包含撇號(噩夢,如果他們這樣做)使用此備用

sed -e "s/'/'\\\\''/g;s/\(.*\)/'\1'/" 
+0

命令完美無缺 - 顯然如果有人在文件上使用它,它會在命令的末尾添加它。 – user191960 2009-10-24 00:36:10

+2

如果文件名包含撇號,該怎麼辦? – asveikau 2009-10-24 01:05:49

+1

我會修改此sed -e「s /'/'\\\''/ g; s/\(。* \)/'\ 1'/」 – asveikau 2009-10-24 01:12:29

4

使用SED:

sed -i "s/^.*$/'&'/g" filename 
+0

不適用於我Adam - 根據特定文件名獲取各種錯誤 - 可能需要-e在那裏? – 2009-10-24 00:42:00

+0

很確定我確實彈出到cygwin,它沒有問題。可以做一個類型,但。 – 2009-10-24 06:21:55

3

您可以使用sed(1)在每個的開頭和結尾插入單引號如下所示:

sed -i~ -e "s/^/'/;s/$/'/" the_file 
2

非常簡單的邏輯,你只需要在前面和後面回顯引號。

while read -r line 
do 
    echo "'$line'" 
    # do something 
done < "file" 
+0

爲什麼所有回答者和在先選民都傾向於使用sed?這個問題沒有要求。這是否工作?我不熟悉Bash控制流程。 – 2016-05-24 15:15:10

相關問題