我在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);
?>
您可以将cut
与grep
结合使用来获取所需的内容。
cat file.php | grep 'fookey' | cut -c18-25
cut
用于获取子字符串。在-cN-M
中,N
和M
是子字符串的起始和结束位置。