0

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

例子 :

$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/”的行的一些信息。

4

2 回答 2

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";
    }
}
于 2013-04-23T12:44:47.517 回答
0

变成一个数组$usergrep它。关于提取,如果您需要一些帮助,您应该提供详细信息。无论如何,在尝试了用explode 和grep 获得的东西之后回来。

于 2013-04-23T12:44:44.563 回答