Windows中的EGREP和AWK等效命令

时间:2017-02-16 19:47:34

标签: windows git bash awk grep

我正在构建一个自动预提交脚本based in the Carlos Buenos Vinos tutorial,但是大问题是:我在开发计算机中使用Windows的公司工作(我知道我知道,我可以'对这个sry什么都不做。)

该脚本具有以下方法:

private function extractCommitedFiles()
{
    $output = array();
    $rc = 0;

    exec('git rev-parse --verify HEAD 2> /dev/null', $output, $rc);

    $against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
    if ($rc == 0) {
        $against = 'HEAD';
    }

    // unix / linux
    // exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output);
    // windows
    exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output);

    return $output;
}

那么......是否有任何人对下面的线路有相同的命令?

exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output);

如果我在UNIX / Bash中运行此命令,我必须得到以下结果:

core/web/favicon.ico                        
core/web/htaccess.txt                       
core/web/index.html                         
core/web/slim.php                           
core/web/swagger/css/print.css              
core/web/swagger/css/reset.css              
core/web/swagger/css/screen.css             
core/web/swagger/css/style.css              
core/web/swagger/css/typography.css         
core/web/swagger/fonts/DroidSans-Bold.ttf        

但是使用exec(' ...没有egrep和awk命令我会得到以下结果:

A       core/web/htaccess.txt                      
A       core/web/index.html                        
A       core/web/slim.php                          
A       core/web/swagger/css/print.css             
A       core/web/swagger/css/reset.css             
A       core/web/swagger/css/screen.css            
A       core/web/swagger/css/style.css             
A       core/web/swagger/css/typography.css        
A       core/web/swagger/fonts/DroidSans-Bold.ttf   

谢谢你们!

2 个答案:

答案 0 :(得分:2)

首先,该命令是一个不好的例子。几乎没有必要在同一个管道中使用grepawk,因为awk功能更强大。因此,命令应缩短为

 awk '/^(A|M)/ {print $2}'

其次,即使这是一个糟糕的例子,因为git diff-index有各种输出选项,包括--name-only--diff-filter,可以合并为

git diff-index --cached --name-only --diff-filter=AM $against

答案 1 :(得分:0)

您可以下载Windows工具的Windows版本,并将bin文件夹添加到PATH变量中。

http://gnuwin32.sourceforge.net/packages/gawk.htm http://gnuwin32.sourceforge.net/packages/grep.htm

对于" egrep"你可以使用" grep -E"。 "呆子"将完成像" awk"在你的情况下。