2017-02-16 53 views
0

我正在構建一個自動化預執行腳本based in the Carlos Buenos Vinos tutorial,但是BIG問題是:我在一個在開發計算機中使用Windows的公司工作(我知道我知道但我不能對此無所作爲)。Windows中的EGREP和AWK等效命令

腳本有以下方法:

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上運行這個命令/擊:

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 

謝謝能跟大家

+0

我可以。但我試圖自動完成這項任務,因爲我們有其他開發人員,而這個想法是版本腳本,可以在沒有任何額外的手動任務的情況下完成這項工作。我接近命令** git ls-files -m **,但沒有用於添加文件的選項-a :( –

+0

egrep命令只允許那些以A或M開頭的行。awk命令只是打印「第二列」是文件名,因此你可以添加或修改文件 –

+0

修改你自己的程序來執行該部分不應該很困難 - 跳過不以'A'或'M'開始的行, ;跳過第一個字段和後面的空白字符,並從該行的其餘部分收取文件名(Awk腳本對於名稱中帶有空格的任何文件名都不起作用) – tripleee

回答

0

你可以下載工具的Windows版本,並添加斌倍!呃到PATH變量。

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

對於 「egrep的」 可以使用的 「grep -E」。在你的情況下,「gawk」將完全像「awk」一樣完成這項工作。

+0

我可以,但是我試圖自動完成這個任務,因爲我們有其他開發人員,並且這個想法是對腳本進行版本化,不需要任何額外的手動任務就可以完成這個任務。 –

2

首先,該命令是一個不好的例子。因爲awk功能更加強大,所以幾乎不需要在同一管道中使用grepawk。因此,該命令應縮短爲

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

其次,即使這是一個壞榜樣,因爲git diff-index有各種輸出選項,包括--name-only--diff-filter,可以組合爲

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