欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

深入探索grep的单引号双引号,以及单双引号互相包含的情况 有大用

深入探索grep的单引号双引号,以及单双引号互相包含的情况

               
Bovinitwo 2017-08-08 00:25:26  8551  收藏 1                
版权            

单引号:                

                 

可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换。                

                 

双引号:                

                 

把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。                

                 

不加引号:                

                 

不会将含有空格的字符串视为一个整体输出如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。                

                 

使用规则:                

                 

一般常量用单引号''括起,如果含有变量则用双引号""括起。                

                 

最大不同:                

                 

单引号与双引号的最大不同在于双引号仍然可以保有变数的内容,但单引号内仅能是一般字                

元,而不会有特殊符号                

                 

使用举例:                

                 

“”号里面遇到$\等特殊字符会进行相应的变量替换                

‘’号里面的所有字符都保持原样                

对于字符串,两者相同                

匹配模式也大致相同                

但有一些区别非常容易混淆                

                 

grep "$a" file        #引用变量a,查找变量a的值                

                 

grep '$a' file        #查找“$a”字符串                

                 

grep "\\" file        #grep: Trailing backslash(不知原因)                

                 

grep '\\' file        #查找‘\’字符                

                 

1美元符                

                 

2反斜杠                

                 

3反引号                

                 

4" 双引号                

这四个字符在双引号中是具有特殊含义的,其他都没有,而单引号使所有字符都失去特殊含义                

                 

如果用双引号,查找一个\,就应该用四个\:                

grep "\\\\" file 这样就对了,这样等同于:                

grep '\\' file                

                 

第一条命令shell把四个\,转义成2\传递给grepgrep再把2\转义成一个\查找                

第二条命令shell没转义,直接把2\传递给grepgrep再把2\转义成一个\查找                

其实grep执行的是相同的命令                


               

以上内容引至                

http://blog.csdn.net/delphityro/article/details/7388217
               

---------------------------------------------------------分割线--------------------------------------------------                

还有一种情况是查找的内容含有单引号,也含有变量如$HOME,如文件:                

               

"$HOME'
这时候 grep '"$HOME''的话,因为内容有单引号,第一个单引号会和倒数第二个单引号匹配,导致找不到正确内容,这里只能用双引号(如有单引号方法可以留言讨论),即grep "\"\$HOME'"。


               

结论:当grep的字符串中有单引号时,需要使用双引号,以防止单引号匹配错误。但这也会导致不想转换的变量被双引号转换,只能用\转义。                


来自  https://blog.csdn.net/ly52352148/article/details/76863327


Linux查询带双引号的字段    

linux查询文件中带双引号的字段,是怎么查询的
我平时都是用grep "字段" a.log ,但是 如果我要查询的字段是“字段”:“状态”
加在一起应该怎么查?
   
 我来答 
分享
 举报
蓝金88
2014-09-26 · 超过14用户采纳过TA的回答                
关注                
用转义字符\
grep "\".*\"" -rn .
grep "\".*\":\".*\"" -rn .
追问
我之前也用转移符   但是具体怎么用 不知道了  
"rspCode":"0000"比如说 我想查询今天所有的返回这个字段的日志
应该怎么转移 在哪儿转移?
                           
追答
直接用grep "\".*\":\".*\"" -rn "文件名路径"   就可以了
例如我又一个文件叫做test.log (使用cat 查看结果如下)
$ cat test.log -n
1 "rspCode":"0000" hello
2 "rspCode":"0000" world
3 test grep
4 hello world!
5 "rspCode":"0000" the last line of this log file
                           

来自  https://zhidao.baidu.com/question/1668303022250345107.html

普通分类: