在unix中处理文件名中的无效字符

时间:2015-09-20 11:18:40

标签: python linux bash unix special-characters

我需要对有"!"的文件执行一些linux命令操作。喜欢文件名中的字符。但每当我尝试执行命令时,我都会遇到错误。

[root@ATD-6000 ~]# cat a!aapoorv.txt
-bash: !aapoorv.txt: event not found

我正在使用paramiko模块在python中执行这些命令。我无法使用原始字符串r' filestringname',因为我正在从db本身读取字符串名称。

如何使用python / bash转义/处理这些字符之王。

3 个答案:

答案 0 :(得分:2)

试试这个:

cat a\!aapoorv.txt

或者

cat 'a!aapoorv.txt'
  

请注意,虽然cat a\!aapoorv.txt适用于实现csh样式历史记录扩展的所有shell,但cat 'a!aapoorv.txt'在csh / tcsh中不起作用。

有关详细信息,您可以看到有关 QUOTING man bash

以下是该文件的一部分:

  

引用用于删除shell中某些字符或单词的特殊含义。

     

引用可用于禁用特殊字符的特殊处理,防止保留字被识别,并防止参数扩展。

这是输出:

[kevin@Arch test]$ ls
a!aapoorv.txt
[kevin@Arch test]$ cat a\!aapoorv.txt 
Hello, This is a test
[kevin@Arch 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 :(得分:0)

使用单引号'':

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

答案 2 :(得分:0)

对于Bash,您需要使用其他答案描述的转义方法(单引号或反斜杠)。

在Python中,您不应该使用原始字符串或任何其他类型的转义来打开具有特殊字符的文件。

例如,这很好用:

my_f_contents = open("a!aapoorv.txt").read()