如何从PHP数组中获取grep值

时间:2019-07-17 07:06:48

标签: regex linux grep

我在php文件中有简单的php数组。这是内容:

<?php

$arr = array(
    'fookey' => 'foovalue',
    'barkey' => 'barvalue'
);

如何使用foovalue命令获取值grep

我尝试过:

cat file.php | grep 'fookey=>'

cat file.php | grep 'fookey=>*'

但总是返回整行。

5 个答案:

答案 0 :(得分:1)

如果您只是按照在此处发布的方式来执行grep命令,则该命令不起作用。 但是,如果您以任何方式从grep获得该行,

将您从grep获得的输出通过管道传递到

awk -F"'" '{print $4}'

我在PC上以这种方式进行了测试:

echo "'fookey' => 'foovalue'" | awk -F"'" '{print $4}'

答案 1 :(得分:1)

grep 'fookey=>'不返回任何匹配项,因为此正则表达式不匹配。您的示例显示了一条记录,该记录在fookey周围带有单引号,在=>之前有一个空格。

此外,您想丢掉useless use of cat.

因为您的正则表达式包含文字单引号,所以我们改用双引号来保护正则表达式免受shell攻击。

grep "'fookey' =>" file.php

如果您的目标是提取=>之后的单引号内的值,则简单的标准解决方案是使用sed而不是grep。在匹配的行上,在打印该行之前,不要用任何内容替换周围的文本。

sed "/.*'fookey' => '/!d;s///;s/'.*//" file.php

更多细节

  • /.*'fookey' => '/!d跳过与此正则表达式不匹配的任何行;
  • s///替换匹配的正则表达式(当您传入空的正则表达式时隐含);
  • s/'.*//将其余单引号后的所有内容替换为空;
  • 然后sed打印结果行(因为它总是这样做)

如果遇到“未找到事件”错误,您想set +H或(在不太可能发生的情况下,您确实想使用Csh历史记录扩展)弄清楚如何转义!;另请参见echo "#!" fails -- "event not found"

除此之外,我们很幸运脚本没有包含双引号中特殊的字符。一般来说,单引号会更安全,因为它们确实保留了逐字之间的文本,而外壳中的双引号则较弱(您必须分别转义任何美元符号,反引号或反斜杠)。

答案 2 :(得分:1)

这应该做:

awk -F "'" '$2~/fookey/ {print $4}' file

或者您的情况

awk -F "'" '$2~/secret/ {print $4}' file

它将搜索第二个字段包含fookey/secret的所有行以及带有您的密码的打印要塞字段。

答案 3 :(得分:0)

您可以将cutgrep结合使用以获得所需的东西。

cat file.php | grep 'fookey' | cut -c18-25

cut用于获取子字符串。在-cN-M中,NM是子字符串的开始和结束位置。

答案 4 :(得分:0)

要从数组中获取值,为什么不能使用array_search方法而不是grep?

<?php
$arr = array(
    'fookey' => 'foovalue',
    'barkey' => 'barvalue'
);
echo array_search("foovalue",$arr);
?>