返回特定的命令行unix php

时间:2013-04-23 12:40:04

标签: php unix command-line

我想检索多行文本文件和处理行。

示例:

$user = system('getent passwd') ."\n";

结果例子:

tcpdump:x:72:72::/:/sbin/nologin
guest:x:500:500:Guest User:/home/guest:/bin/bash
dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
dovenull:x:495:488:Dovecots unauthorized user:/usr/libexec/dovecot:/sbin/nologin
sa-milt:x:494:487:SpamAssassin Milter:/var/lib/spamass-milter:/bin/bash
demo1:*:2417:100:albert DemoUn:/home/gir_net/demo1:/bin/bash
demo2:*:2418:100:alfred DemoDeux:/home/gir_net/demo2:/bin/bash
demo3:*:2419:100:alphonse DemoTrois:/home/gir_net/demo3:/bin/bash
demo4:*:2420:100:alcide DemoQuatre:/home/gir_net/demo4:/bin/bash

我想检索命令结果中包含“/ home /”的整行。 我尝试了很多解决方案,但它不起作用。

我检索后,我想提取包含“/ home /".

的行的索引信息

2 个答案:

答案 0 :(得分:1)

以下是使用正则表达式的可能解决方案:

$user = shell_exec('getent passwd');
preg_match_all('/\/home\/[^:]+/', $user, $matches);

foreach ($matches[0] as $dir) {
    print $dir;
}

/* will print:
/home/guest
/home/gir_net/demo1
/home/gir_net/demo2
/home/gir_net/demo3
/home/gir_net/demo4
*/

<强>更新

如果要显示整行,则更容易使用字符串函数而不是正则表达式。

$user = shell_exec('getent passwd');
$user = explode("\n", trim($user));
foreach ($user as $line) {
    if (strpos($line, '/home/') !== FALSE) {
        echo $line."\n";
    }
}

答案 1 :(得分:0)

$user变为an arraygrep。关于提取,如果你需要一些帮助,你应该提供详细信息。无论如何,之后回来尝试使用explode和grep获得的东西。