逃避反斜杠后出现Grep问题

时间:2017-07-31 03:05:19

标签: linux bash grep

我正在尝试grep字符串

"SNTCHDCS06-Filesystem D:\\ Label:Data  Serial Number f8271450"

来自csv文件,但不知怎的,我失败了。

我知道我需要在两个反斜杠的顶部添加两个反斜杠(一个用于shell,一个用于bash),但在此之后它不起作用。

以下命令有效。

[root@nagiospdc01 folder]# grep -e "^SNTCHDCS06-Filesystem D:\\\\" in/masterlist.csv
SNTCHDCS06-Filesystem D:\\ Label:Data  Serial Number f8271450,SNTCHDCS06,10.24.64.210,Active Directory,AD Server,UCS,Filesystem D:\\ Label:Data  Serial Number f8271450,Windows Team,0,XM_OPS_WIN,Windows Team,Y,Y,N,N,Y,Y,Y,Y,Y,N,N,Y,Y,ITOC

当我尝试grep for the space之后,grep不起作用而且只是失败。

[root@nagiospdc01 folder]# grep -e "^SNTCHDCS06-Filesystem D:\\\\ " in/masterlist.csv

感谢有人可以通过正确的grep语法和命令启发我。

2 个答案:

答案 0 :(得分:2)

使用单引号,

grep -e '^SNTCHDCS06-Filesystem D:\\ Label:Data Serial Number f8271450'

使用双引号\\时,bash将转换为单\。但是,bash不会查看单引号。

来自Bash手册:

  

3.1.2.2 Single Quotes

     

用单引号(')括起字符可保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使前面有反斜杠也是如此。

     

3.1.2.3 Double Quotes

     

用双引号括起字符(")会保留引号中所有字符的字面值,但$`\除外,启用历史记录扩展时,!。字符$`在双引号中保留其特殊含义(请参阅Shell Expansions)。只有在后跟以下字符之一时,反斜杠才会保留其特殊含义:$`"\或换行符。在双引号内,将删除后跟其中一个字符的反斜杠。没有特殊含义的字符前面的反斜杠不做修改。双引号可以在双引号内引用,前面加一个反斜杠。如果启用,则将执行历史记录扩展,除非使用反斜杠转义出现在双引号中的!。 <{1}}之前的反斜杠不会被删除。

     

特殊参数!*在双引号中具有特殊含义(请参阅Shell Parameter Expansion)。

答案 1 :(得分:0)

grep中的-F选项允许搜索固定字符串。单引号也有助于搜索确切的字符串。

-F, - 固定字符串: 将PATTERN解释为固定字符串列表,由换行符分隔,其中任何一个都要匹配。

grep -F 'SNTCHDCS06-Filesystem D:\\ Label:Data  Serial Number  f8271450' masterlist.csv

*SNTCHDCS06-Filesystem D:\\ Label:Data  Serial Number f8271450*