【问题标题】:Unable to understand grep command : grep -n -o -a --text \"audio uri=\\".*\\""无法理解 grep 命令:grep -n -o -a --text \"audio uri=\\".*\\""
【发布时间】:2015-07-16 13:23:20
【问题描述】:

此命令正在用 Python 编写的工具中使用,用于从文本文件中的 <audio uri="a852"/> 行中 grep 以下字符串 'audio uri="a852'。

但我无法理解这里如何使用\\

如果我们在“audio uri. 我对这个“\”的理解是它是为了在我用 Python 编写的工具中使用它。

【问题讨论】:

  • 行是这样的:文本文件中的''。
  • 可能应该是grep -n -o -a --text \“audio uri=\\”.*\\“\” - 命令本身是否在双引号内?
  • 你是用python来做系统调用的吗?你能把代码行放在它被调用的地方吗?但是双 \\ 将导致您的外壳只有一个 \ 。那么字符串 \" 将被解释为 qoute 标记而不是字符串分隔符。因此 grep 将匹配字符串 uri=".*" -- uri= 后跟 qoutes 之间的任何内容
  • @TimothyMurphy 我认为你是对的。 Python 工具在我的系统中执行此命令后,实际执行的命令是: grep -n -o -a --text “audio uri=\”.*\“” 这些“\”用于特殊字符。谢谢!
  • "\\" 现在很清楚那些令人困惑的。但我不明白为什么我们在“audio uri 之前使用额外的 \ 执行此命令。如果我们直接在 shell 中执行此命令将不起作用,但只有在 audio uri 之前没有 \ 的情况下才有效。我认为这是要做的使用 Python 执行。

标签: python shell grep


【解决方案1】:

\ 用于取消" 的意义。在这里,您必须将您的 " 识别为文本而不是 Bash,以匹配 url=".*"

例如,您可以像这样使用\

mista ~> myname='Mistalis'

mista ~> echo $myname
Mistalis

mista ~> echo \$myname
$myname

我认为你会得到一个双 \\,因为你的 Python 代码还需要取消 "caracter,使用 \

如果您想在控制台上运行它,请尝试: grep -n -o -a --text “audio uri=\”.*\“”。 在这里,我刚刚删除了双 \\ 之一。

【讨论】:

  • 谢谢@Mistalis。挺好用的。
  • 很高兴我能帮上忙。如果它解决了您的问题,您可以接受我的答案作为正确答案吗? :)
  • 你清除了 30% 的困惑我不明白为什么我们在执行这个命令时在 "audio uri 之前加上一个 \。如果我们直接在 shell 中执行这个命令是行不通的,但是仅在音频 uri 之前没有 \ 时有效。我认为这与 Python 执行有关。
猜你喜欢
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多