Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回unix php的特定命令行_Php_Unix_Command Line - Fatal编程技术网

返回unix php的特定命令行

返回unix php的特定命令行,php,unix,command-line,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 u

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

例如:

$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/”的行的somme信息,将
$user
转换为它。关于提取,如果需要帮助,请提供详细信息。无论如何,请在尝试使用explode和grep可以获得的内容后返回

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

$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";
    }
}

对我来说,我只看到:/home/gir_net/demo4,只有最后一个。变量转储($result)=>array(1){[0]=>array(1){[0]=>string(32)“/home/giron\u net/demo6”}我忘记了
system()
只返回最后一行。尝试使用
$user=shell_exec('getent passwd')以获取完整的输出字符串。哇,这是可行的,但match不会返回包含“/home/”但她从/home/开始的完整行。我没有:demo1:::2417:100:albert DemoUn:你是想得到完整的行还是仅仅是主目录?完整的行谁有“/home/”。我们可以预先匹配“:*:”tooI已经尝试过了,但是结果是一个只有最后一行(demo4)、demo1、2、3或无法识别的数组…请参阅bsdnoobz注释;一般来说,我避免使用这个系统,所以我不习惯它的细节;一旦你有了所有的行,explode和grep应该可以工作了是的,我们需要使用“shell_exec”而不是系统。