【问题标题】:How can I search for (escape) a dollar sign using ack?如何使用 ack 搜索(转义)美元符号?
【发布时间】:2013-02-07 07:49:34
【问题描述】:

我想在代码库中确认文字字符串:“$$”,但像这样转义美元符号:

ack \$\$

没用。

【问题讨论】:

  • ack '[$][$]' 。字符类。比 N 次转义还干净。

标签: regex perl unix ack


【解决方案1】:

您可以使用三个反斜杠转义美元符号字符,如下所示:

ack "\\\$\\\$"

或使用单引号,您只需将其转义一次:

ack '\$\$'

【讨论】:

  • 使用单引号要容易得多:ack '\$\$\(' 应该可以正常工作。
【解决方案2】:

你被 shell 引用弄糊涂了。输入时:

ack "\\\$\\\$\("

shell 插入双引号字符串,以便\\ 被转换为\\$ 被转换为$ 并且\( 被转换为\( 并且ack 将字符串\$\$\( 转换为它的论点。通过使用单引号和调用来避免 shell 插值要简单得多:

ack '\$\$\('

ack 替换为echo 以探索shell 如何扩展字符串。请注意,

ack "\\$\\$\("

也可以,但原因略有不同。在这里,前两个\ 被视为单个(转义)\,然后$ 被转换为$,因为它后面跟着一个不是变量名中有效字符的字符。 \( 扩展为 \( 而不是简单的 (,因为 ( 不受插值影响,因此不需要转义。但请注意,在双引号之外,\( 会转换为 (

Shell 引用规则有时会令人困惑!

【讨论】:

  • 是的,我很容易被 shell 引用规则弄糊涂了——不过,回声技巧是个好主意,谢谢分享
【解决方案3】:

您可以使用printf 为您处理引用,方法是使用%q 格式说明符。

$ printf %q '$$('
\$\$\(

help print 有以下要说的(我假设这里是 bash)`

 %q quote the argument in a way that can be reused as shell input

【讨论】:

    【解决方案4】:

    使用 ack 的-Q 进行转义。

    ack -Q '$$'
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 1970-01-01
      • 2017-02-19
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 2021-07-01
      • 1970-01-01
      相关资源
      最近更新 更多