如何从 php 数组中获取 grep 值



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

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

如何使用grep命令获取值foovalue

我试过:

cat file.php | grep 'fookey=>'

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

但始终返回整行。

如果你按照你在这里发布的方式执行,你的grep命令不应该工作。 但是,如果你从grep无论你在做什么方式都得到这条线,

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

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

我在电脑上以这种方式对其进行了测试:

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

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

另外,您想失去无用的使用cat

由于您的正则表达式包含文字单引号,因此我们改用双引号来保护正则表达式免受 shell 的影响。

grep "'fookey' =>" file.php

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

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

更详细地说,

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

如果你得到"找不到事件"错误,你想set +H或(在极不可能的情况下,你真的想使用Csh历史扩展)弄清楚如何转义!;另请参阅echo"#!"失败 - "找不到事件">

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

这应该可以:

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

或在您的情况下

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

它会搜索第二个文件包含fookey/secret的所有行,以及带有您的密码的打印堡垒字段。

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

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

您可以将cutgrep结合使用来获取所需的内容。

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

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

最新更新