2015-09-20 35 views
2

我需要對具有「!」的文件執行一些linux命令操作。像文件名中的字符。但每當我嘗試執行命令時,我都會收到錯誤。在unix中處理來自文件名的無效字符

[[email protected] ~]# cat a!aapoorv.txt 
-bash: !aapoorv.txt: event not found 

我使用paramiko模塊在python中執行這些命令。我不能使用原始字符串r'filestringname',因爲我正在從數據庫本身讀取字符串名稱。

如何使用python/bash轉義/處理這些國王的角色。

+0

@AhsanulHaque:沒有。 – alk

+0

'open(「a!aapoorv.txt」)'應該可以正常工作 –

回答

2

試試這個:

cat a\!aapoorv.txt 

或本

cat 'a!aapoorv.txt' 

注意的是,雖然cat a\!aapoorv.txt作品中的所有炮彈實現該CSH風格的歷史展開,cat 'a!aapoorv.txt'不CSH工作/ tcsh的。

獲取更多信息,您可以看到man bash有關QUOTING

下面是一些文件的:

引用被用於去除某些字符或詞的特殊含義的殼。

引用可用於禁用特殊字符的特殊處理,以防止保留字被識別,並防止參數擴展。

這裏是輸出:

[[email protected] test]$ ls 
a!aapoorv.txt 
[[email protected] test]$ cat a\!aapoorv.txt 
Hello, This is a test 
[[email protected] test]$ cat 'a!aapoorv.txt' 
Hello, This is a test 


在Python中,你不需要逃避特殊字符,這裏是一個測試:

>>> with open('a!aapoorv.txt') as f: 
...  f.read() 
...  
... 
'Hello, This is a test\n' 
>>> with open(r'a!aapoorv.txt') as f: 
...  f.read() 
...  
... 
'Hello, This is a test\n' 
>>> 
+1

做所有這些工作?我已經測試了第三個創建文件,它不起作用。 –

+2

最後一個(帶雙引號)不會起作用(您仍然需要用反斜槓來跳過'!')。另一種選擇是使用'set + H'禁用歷史擴展。 –

+0

是的,他們都可以工作,讓我編輯我的答案,並添加更多的信息和輸出。 –

0

使用單引號'':

$ cat 'a!aapoorv.txt' 
cat: a!aapoorv.txt: No such file or directory 
0

對於Bash,您需要使用其他答案描述的轉義方法(單引號或反斜線)。

在Python中,您不需要使用原始字符串或任何其他類型的轉義來打開具有特殊字符的文件。

例如,這工作得很好:

my_f_contents = open("a!aapoorv.txt").read() 
相關問題