【问题标题】:Finding a string at the end of a line using shell_exec grep UNIX使用 shell_exec grep UNIX 在行尾查找字符串
【发布时间】:2018-12-18 19:50:24
【问题描述】:

我正在尝试使用

在文件中的行尾查找一个字符串
shell_exec("grep -rl '=".$_GET['s']."$'");

这不返回任何内容,但如果我删除 $ 它将返回所有匹配项(即使不在行尾。)

请让我知道我做错了什么。

【问题讨论】:

  • 有 PHP 方法可以做到这一点。解释您要查找的内容,有人会向您展示如何在 PHP 中执行此操作
  • 我正在寻找可以帮助解决此问题的人:shell_exec("grep -rl '=".$_GET['s']."$'"); ...或者可以解释为什么它不起作用
  • 可能是您正在抓取的文件有 CRLF 行结尾吗?我将按照以下步骤进行: (1) 将您正在构建的命令存储到 PHP 变量中,例如 $cmd,然后打印该变量。 (2) 做一个shell_exec($cmd)。 (3)验证还是不行,把第(1)步打印的命令复制到命令行,看看能不能用。这至少会告诉你问题是在 PHP 端还是在 Shell 端。
  • @user1934428 你向我发送了正确的方向.. 添加 $'\r' 解决了它。有没有办法在行尾匹配 \r 或 \n?
  • 我发现推荐$'\r' 是有风险的,因为这是由shell 解释的,我们不知道您将运行什么shell。 bash 肯定可以理解它,但是 AFIK 它不在 Posix 中(如果我错了,请纠正我),我担心如果你在 shell_exec 启动严格的 POSIX shell 的系统上,这可能会中断。至于性能,用 PHP 本身搜索可能比用编译语言(grep 用 C 编写)要慢,但另一方面,您的解决方案需要 PHP 生成一个子进程,这也不便宜。

标签: php shell unix grep


【解决方案1】:

你可以试试:preg_match()

用于在行中搜索字符串、字符和文件扩展名

http://php.net/manual/en/function.preg-match.php

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多