我在php文件中有简单的php数组。这是内容:
<?php
$arr = array(
'fookey' => 'foovalue',
'barkey' => 'barvalue'
);
如何使用foovalue
命令获取值grep
?
我尝试过:
cat file.php | grep 'fookey=>'
或
cat file.php | grep 'fookey=>*'
但总是返回整行。
答案 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)
您可以将cut
与grep
结合使用以获得所需的东西。
cat file.php | grep 'fookey' | cut -c18-25
cut
用于获取子字符串。在-cN-M
中,N
和M
是子字符串的开始和结束位置。
答案 4 :(得分:0)
要从数组中获取值,为什么不能使用array_search方法而不是grep?
<?php
$arr = array(
'fookey' => 'foovalue',
'barkey' => 'barvalue'
);
echo array_search("foovalue",$arr);
?>