【问题标题】:Shell command inside Perl ScriptPerl 脚本中的 Shell 命令
【发布时间】:2014-11-21 06:47:26
【问题描述】:

全部

我有以下 shell 命令在 shell 上按预期工作,但在 perl 中调用时不工作

外壳命令:

grep -P -s -irl --include \*.v "\s+hello\s?[(].*" <PATH> 

工作正常

Perl 内部:

$inst_search = `grep -P -s -irl --include \*.v "\s+$inst\s?[(].*" @plt_dirs`;

不工作

我怀疑我在 grep 中缺少正则表达式的内容。请纠正我!

谢谢, 维韦克

【问题讨论】:

  • 检查这个...如果这对你有帮助:stackoverflow.com/questions/3200801/…
  • Perl 有一个 grep 内置。我建议使用它而不是 shell 转义。
  • @Praveen:发现它很有用..解决了我的问题..谢谢!

标签: regex perl unix grep


【解决方案1】:

当使用字符串调用 exec/system/qx(或反引号)时,Perl 将转义特殊的 shell 字符。

尝试使用 exec 或 system 函数,但传递一个列表,例如

system('grep', '-P', '-s', '-irl', '--include', '\*.v', '"\s+hello\s?[(].*"', @plt_dirs);

您可能还想查看一个为您执行一些错误处理的模块,例如 IPC::System::Simple。

【讨论】:

    【解决方案2】:

    试试这个:

    $inst_search = qx#grep -P -s -irl --include \*.v "\s+$inst\s?[(].*" @plt_dirs#;
    

    或者使用任何其他非字母数字字符代替"#"进行引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 2017-10-24
      • 2011-07-14
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多