我正在尝试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语法和命令启发我。
答案 0 :(得分:2)
使用单引号,
grep -e '^SNTCHDCS06-Filesystem D:\\ Label:Data Serial Number f8271450'
使用双引号\\
时,bash将转换为单\
。但是,bash不会查看单引号。
来自Bash手册:
用单引号(
'
)括起字符可保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使前面有反斜杠也是如此。用双引号括起字符(
"
)会保留引号中所有字符的字面值,但$
,`
,\
除外,启用历史记录扩展时,!
。字符$
和`
在双引号中保留其特殊含义(请参阅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*