Bash grep 不适用于撇号
Posted
技术标签:
【中文标题】Bash grep 不适用于撇号【英文标题】:Bash grep is not working with apostrophe 【发布时间】:2014-07-30 11:04:03 【问题描述】:我已尝试运行此代码:
lsof | grep "/file/path/"
如果文件有这个标志:
`
我收到一个错误:
syntax error near unexpected token '`'
我尝试用\
转义这个标志,但我得到了同样的错误。
操作系统:CentOS 6
【问题讨论】:
我没有看到任何可能导致意外错误的代码部分。你确定那是你唯一运行的东西吗?如果你只运行lsof
,你会得到什么?
什么文件?您将一个命令的标准输出传递给另一个命令的标准输入。
如果你的意思是你想要 grep 的文件中包含该字符,那么在 grep 的参数中转义它应该可以工作,但如果由于某些奇怪的原因它不能,你也可以尝试使用单引号围绕参数而不是双引号。但请提供导致问题的确切命令。
“如果文件有这个符号'”是什么意思?如果 ' 是 lsof 输出的一部分,那不可能是见证 echo "ab'cd" | grep "b" -- 也回显 "ab'cd" | grep "'c" 的行为符合预期
【参考方案1】:
` 字符(通常称为“反引号”)由 shell 专门解释,即使被引号包围。
具体来说,`cmd args`
的意思是“执行命令 cmd args
并将反引号字符串替换为该命令的输出。”如果它被引号包围——"`cmd args`"
——被替换的字符串将不会进行分词或路径名扩展。 (这通常是你想要的,所以引用的反引号很常见。)
该语法已被弃用很长时间,但仍被接受。新代码应改用$(cmd args)
。如上所述,您通常希望避免对替换文本进行分词和路径名扩展,因此您通常会看到"$(cmd args)"
。
简而言之,如果您想将文字反引号放入参数字符串中,您应该使用单引号:
lsof | grep '/file/path`s/'
或 \ - 转义反引号:
lsof | grep "/file/path\`s/"
【讨论】:
以上是关于Bash grep 不适用于撇号的主要内容,如果未能解决你的问题,请参考以下文章