乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      grep的兩個替代品(補充?)

       灬木木的花灬 2015-09-15

      GREP是我很常用的命令,尤其在瀏覽代碼時,可以用它來搜索一個變量/函數(shù)在哪些文件里面被引用了。

      但grep有一些不爽的地方,這兩天看到了兩個跟grep類似的東東,可以在一定場景彌補grep的不足,甚至是替代它。

      ACK

      http:///

      ack的廣告詞是“better than grep, a source code search tool for programmers”,它旨在解決grep用在寫代碼時的諸多不爽:

      1. 排除一些不需要搜索的文件/目錄

      在寫代碼時,我們常常會有.svn, .cvs這些目錄,還有 foo~, #foo#這些臨時文件/備份文件,以及一些二進制文件。要在grep命令行排除這些目錄,是很麻煩的的,因為傳統(tǒng)grep并沒有這個能力,而是要結(jié)合find來使用:

      grep pattern $(find . | grep -v .svn | grep -v .cvs | egrep -v '~$' | egrep -v '^#')

      這不僅很繁瑣,而且在文件很多時會因命令過長而出錯。如果是在Windows系統(tǒng)上就相當讓人抓狂了(是的,你可以用一個msys或者cygwin提供的bash來作為shell,以便它支持上述復(fù)雜的shell命令,但調(diào)用其它Windows程序的地方又悲劇了)。

      而ack的解決辦法很簡單:把這些東西內(nèi)置到程序里,搜索時自動忽略這些文件。

       

      2. 讓grep只搜索某些類型的文件,但要求搜索子目錄

      grep可以搜索子目錄(用-R選項),但這種情況下你就不能再指定文件類型,所以傳統(tǒng)的方法也是結(jié)合find來折騰:

      grep pattern $(find . -name '*.pl' -or -name '*.pm' -or -name '*.pod' | grep -v .svn)

      在GNU grep 2.5版本上,你可以用 --include=PATTERN --exclude=PATTERN 這兩個選項來過濾文件類型:

      grep -R pattern --include='*.pl' --include='*.pm' --include='*.pod' --exclude=.svn

      這個命令行也挺長,而且你得有個GNU grep >= 2.5。

      ack的解決思路是:1)缺省就搜索子目錄;2)對常用編程語言,ack里面寫好了對應(yīng)哪些文件擴展名,比如perl是.pl, .pm和.pod,那么你只要指定按perl這個語言搜就行了。于是上述命令可以簡化為:

      ack --perl pattern

      如果只想排除perl類型的文件,則可以用:

      ack --noperl pattern

      你可以--type-add TYPE=.ext[,ext2[,...]]或者--type-set TYPE=.ext[,ext2[,...]]來臨時定制文件類型(如果要長期使用,可以修改~/.ackrc。

      同時,也許你已經(jīng)注意到了,其實ack也可以用來替代那一大堆find命令,用來搜索指定類型的文件本身(而不是文件內(nèi)容),ack當然也支持,只需要添加-f 選項就行了:

      ack -f --perl

       

      ack的其它特點

      • 支持pcre
      • 缺省支持顏色,而且會比較智能地不使用顏色
      • 支持很多grep的選項,比如-A(--after-context), -B(--before-context), -C(--context), -H(--with-filename), -i(--ignore-case), -v(--invert-match), -w(--word-only)......

      安裝

      Debian/Ubuntu上改名叫ack-grep了,用apt-get install ack-grep就可以裝上了(命令名也是叫ack-grep而不是ack)。
      ack是用perl5寫的,并沒有什么第三方依賴,所以在其它系統(tǒng)上安裝也很簡單,只要從CPAN安裝App::Ack模塊就可以了。另外該網(wǎng)站還提供了一個單文件版本(standalone version),只要下載后放到bin目錄就行了(前提是安裝了perl5)。
      對于Windows,我用perl2exe做了個純粹單文件版本: ack.exe

       

      glark

      http://www./projects/glark

      與ack關(guān)注點不一樣的是,glark跟關(guān)注文件里面的內(nèi)容,舉兩個例子說一下:

      % glark --and=2 printStackTrace catch *.java

      這表示在java代碼中搜索printStackTrace和catch這兩個詞,要求這兩個詞出現(xiàn)的位置相差不超過2行;

       

      % glark --or catch throw *.java

      這表示要求搜出包含catch或者throw的行;

       

      % glark --and=5 cout --or double float *.c

      這表示要求某行包含double或者float,然后在其上下5行內(nèi)有cout出現(xiàn)。

       

      glark也支持pcre,也缺省支持高亮文件名和匹配文字,也缺省忽略非文本文件,還跟grep的命令行選項保持很高的兼容性。

      glark是用ruby寫的,也沒什么第三方依賴。

      glark也已經(jīng)被Debian/Ubuntu收入(lenny開始就有了),用apt-get install glark即可安裝.





        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多