指定几个目录,有选择的对C/C++/JAVA等类型的代码,进行grep查找字符串的脚本

使用方法:

     

     chgrep   <file_type>   <find_in_sub_dir>   <grep_string>   [case_sensive]

 

     <file_type> :有如下可以选:

     ch :  搜索 *.c   和 *.h  文件类型。

     cpph : 搜索 *.cpp   和 *.h  文件类型。 

    cc: : 搜索 *.cpp  和 *.c  文件类型。

     ccj: 搜索 *.c  *.cpp 和 *.h  文件类型。

     java:搜索 *.java  和 *.h  文件类型。

     asm: 搜索 *.s   和 *.S  文件类型。 忽略大小写。

     mk : 搜索 *.mk   和 *.mak  文件类型。针对makefile的查找。

 

 <find_in_sub_dir>  :可以指定多个目录。这个目录是从当前目录下的 子目录。多个目录用 英文逗号(,)隔开.

  

 <grep_string>  :  要在以上查找到的文件中的,字符串。

 

  [case_sensive]  : 可选的。指定 “ <grep_string>” 是否大小写敏感。默认是 大小写匹配。 如果这里指定 -i 的话,就大小写都无所谓。

 

实例:chgrep ccj kernel,frameworks/ "wpa_supplicant"

       运行结果,可以查看本文最后面的“例子”。    

 

 

实现脚本如下:

文件名:chgrep

#!/bin/bash
    #curr_dir=$(pwd)/
    ign_case=$4
    #echo $curr_dir
    sear_dirs=${2//','/' '}
    echo Sear_dirs:$sear_dirs
    search_dirs=($sear_dirs)
    echo search_dirs:$search_dirs
    if [ $# -lt 3 ]; then
        echo "please append 2 args behind the chgrep!"
        echo "Help(Example):"
        echo "chgrep <file_type> <find_in_sub_dir> <grep_string>"
        echo "chgrep ch mediatek/ blacklight  :is finding blacklight in *.c *.h files in mediatek dir"
        echo "<file_type>:: ch: *.c,*.h; cpph ;cc;ch+k;java;asm;"
    else
        echo Search_dir:$2
        echo Search_Str:$3
        echo Case_sensi:$4

    for idx in $sear_dirs ; do
        echo "----Searching dir: $idx for greping str:$3"
        if [ "$1" = "ch" ]; then
        echo "    Search c and h:"
            find $curr_dir$idx \( -iname "*.c" -o -iname "*.h" \) | xargs grep $ign_case --color=auto "$3"
            find $curr_dir$idx \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "ch+k" ]; then
        echo "    Search c and h in dir(kernel,$2):"
            find $curr_dir$idx \( -name "*.c" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
            find $curr_dir$idx \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
            echo "  ----------results in kernel:"
            find kernel \( -name "*.c" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
            find kernel \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "cpph" ]; then
        echo "    Search cpp and h:"
        find $curr_dir$idx \( -name "*.cpp" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "cc" ]; then
        echo "    Search cpp and c:"
        find $curr_dir$idx \( -name "*.c" -o -name "*.cpp" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "java" ]; then
        echo "    Search java and h:"
        find $curr_dir$idx \( -name "*.java" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "ccj" ]; then
            echo "    Search *.c and *.h:"
            find $curr_dir$idx \( -name "*.c" -o -name "*.h" \) | xargs grep $ign_case --color=auto "$3"
            echo "    Search *.cpp and *.java:"
            find $curr_dir$idx \( -name "*.cpp" -o -name "*.java" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "asm" ]; then
        echo "    Search assemble ,*.S,*.asm:"
        find $curr_dir$idx \( -iname "*.S" -o -iname "*.asm" \) | xargs grep $ign_case --color=auto "$3"
        elif [ "$1" = "mk" ]; then
        echo "    Search makefile ,*.mk,*.mak, makefile, GNUmakefile:"
        find $curr_dir$idx \( -iname "*.mk" -o -iname "*.mak" \) | xargs grep $ign_case --color=auto "$3"
        find $curr_dir$idx \( -iname "makefile" -o -iname "GNUmakefile" \) | xargs grep $ign_case --color=auto "$3"
        else
        echo "--->Search default(all files):"
        find $curr_dir$idx -iname "*" | xargs grep $ign_case --color=auto "$3"
        fi
    done
    fi

 

 

 

 

例子:

#chgrep ccj kernel,frameworks/ "wpa_supplicant"

Sear_dirs:kernel frameworks/
search_dirs:kernel
Search_dir:kernel,frameworks/
Search_Str:wpa_supplicant
Case_sensi:
----Searching dir: kernel for greping str:wpa_supplicant
    Search *.c and *.h:
kernel/include/linux/nl80211.h: * management entities such as wpa_supplicant react to management frames
kernel/drivers/net/wireless/hostap/hostap_hw.c:  * if wpa_supplicant is used. */
kernel/drivers/net/wireless/hostap/hostap_info.c:        * frames and can confuse wpa_supplicant about the current association
kernel/drivers/net/wireless/hostap/hostap_ioctl.c:               * wpa_supplicant to control them internally.
kernel/drivers/net/wireless/hostap/hostap_ioctl.c:               * wpa_supplicant to control them internally.
kernel/drivers/net/wireless/bcmdhd/wl_cfg80211.h:/* In case of WPS from wpa_supplicant, pairwise siute and group suite is 0.
kernel/drivers/net/wireless/bcmdhd/wl_cfg80211.c: * With respect to these flags, wpa_supplicant doesn't start p2p operations on 5GHz channels.
kernel/drivers/net/wireless/bcmdhd/wl_cfg80211.c:               /* wpa_supplicant switches the third and fourth quarters of the TKIP key */
kernel/drivers/net/wireless/bcmdhd/wl_cfg80211.c:               /* WAR: set err = ok to prevent cookie mismatch in wpa_supplicant
kernel/drivers/net/wireless/ipw2x00/ipw2100.c: * wpa_supplicant toggles the security capability of the driver, which
kernel/drivers/net/wireless/ipw2x00/ipw2100.c:  /* This is called when wpa_supplicant loads and closes the driver
kernel/drivers/net/wireless/ipw2x00/ipw2100.c:                   * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/net/wireless/ipw2x00/ipw2100.c:           * wpa_supplicant will control these internally
kernel/drivers/net/wireless/ipw2x00/ipw2200.c:  /* This is called when wpa_supplicant loads and closes the driver
kernel/drivers/net/wireless/ipw2x00/ipw2200.c:                   * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/net/wireless/ipw2x00/ipw2200.c:           * wpa_supplicant will control these internally
kernel/drivers/net/wireless/rndis_wlan.c:/* NDIS data structures. Taken from wpa_supplicant driver_ndis.c
kernel/drivers/net/wireless/rndis_wlan.c:               /* wpa_supplicant gives us the Michael MIC RX/TX keys in
kernel/drivers/net/wireless/prism54/isl_ioctl.c:                 * wpa_supplicant will control these internally
kernel/drivers/net/wireless/libertas/cfg.c:      * - neither "iw" nor "wpa_supplicant" won't call this during
kernel/drivers/staging/vt6655/iwctl.c:  out://not completely ...not necessary in wpa_supplicant 0.5.8
kernel/drivers/staging/vt6655/dpc.c:                            //send event to wpa_supplicant
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:     wpa_supplicant wants to add a PMKID/BSSID to driver.
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:   If cmd is IW_PMKSA_REMOVE, it means the wpa_supplican  wants to
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:                   /* wpa_supplicant is enabling tkip countermeasure. */
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:                   /* wpa_supplicant is disabling tkip countermeasure. */
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:            * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:            * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p)
kernel/drivers/staging/rtl8712/rtl871x_ioctl_linux.c:           return wpa_supplicant_ioctl(dev, &wrq->u.data);
kernel/drivers/staging/rtl8712/rtl871x_security.h:                               * layer ioctl(wpa_supplicant or wzc) */
kernel/drivers/staging/rtl8192e/rtllib.h:extern int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee,
kernel/drivers/staging/rtl8192e/rtllib_wx.c:             * wpa_supplicant to control them internally.
kernel/drivers/staging/rtl8192e/rtllib_softmac.c:       /* This is called when wpa_supplicant loads and closes the driver
kernel/drivers/staging/rtl8192e/rtllib_softmac.c:                * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/staging/rtl8192e/rtllib_softmac.c:int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p,
kernel/drivers/staging/rtl8192e/rtllib_softmac.c:EXPORT_SYMBOL(rtllib_wpa_supplicant_ioctl);
kernel/drivers/staging/rtl8192e/rtl8192e/rtl_core.c:            ret = rtllib_wpa_supplicant_ioctl(priv->rtllib, &wrq->u.data,
kernel/drivers/staging/vt6656/iwctl.c:  out://not completely ...not necessary in wpa_supplicant 0.5.8
kernel/drivers/staging/vt6656/dpc.c:                            //send event to wpa_supplicant
kernel/drivers/staging/rtl8192u/r8192U_core.c:          ret = ieee80211_wpa_supplicant_ioctl(priv->ieee80211, &wrq->u.data);
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211.h:#define ieee80211_wpa_supplicant_ioctl    ieee80211_wpa_supplicant_ioctl_rsl
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211.h:extern int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p);
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:  //choose what wpa_supplicant gives to associate.
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:  /* This is called when wpa_supplicant loads and closes the driver
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:           * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p)
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:  //IEEE_DEBUG_INFO("wpa_supplicant: len=%d\n", p->length);
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:EXPORT_SYMBOL(ieee80211_wpa_supplicant_ioctl);
kernel/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c: *                                   * wpa_supplican  to control them internally.
kernel/drivers/staging/rtl8187se/r8180_core.c:          ret = ieee80211_wpa_supplicant_ioctl(priv->ieee80211, &wrq->u.data);
kernel/drivers/staging/rtl8187se/ieee80211/ieee80211.h:extern int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p);
kernel/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c: /* This is called when wpa_supplicant loads and closes the driver
kernel/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c:          * wpa_supplicant calls set_wpa_enabled when the driver
kernel/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c:int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p)
kernel/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c: //IEEE_DEBUG_INFO("wpa_supplicant: len=%d\n", p->length);
kernel/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c: *                                   * wpa_supplicant to control them internally.
kernel/net/wireless/nl80211.c:           * a hostapd/wpa_supplicant issue -- it always includes the
kernel/net/wireless/scan.c:      * Otherwise, wpa_supplicant gets completely confused with
    Search *.cpp and *.java:
----Searching dir: frameworks/ for greping str:wpa_supplicant
    Search *.c and *.h:
    Search *.cpp and *.java:
frameworks/base/wifi/java/android/net/wifi/WifiInfo.java:     * in an event sent by {@code wpa_supplicant}.
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java: * From <code>defs.h</code> in <code>wpa_supplicant</code>.
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java: * These enumeration values are used to indicate the current wpa_supplicant
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java: * state constants in <code>defs.h</code> in <code>wpa_supplicant</code>.
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * wpa_supplicant refuses any new operations that would
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * Inactive state (wpa_supplicant disabled).
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * configuration. wpa_supplicant is not trying to associate with a new
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * This state is entered when wpa_supplicant starts scanning for a
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * This state is entered when wpa_supplicant has found a suitable BSS
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * This state is entered when wpa_supplicant has found a suitable BSS
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * (with or without WPA/WPA2), wpa_supplicant remains in this state
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * No connection to wpa_supplicant.
frameworks/base/wifi/java/android/net/wifi/SupplicantState.java:     * wpa_supplicant is not running and/or we have not been able
frameworks/base/wifi/java/android/net/wifi/WifiConfiguration.java:     * String representing the keystore URI used for wpa_supplicant.
frameworks/base/wifi/java/android/net/wifi/WifiConfiguration.java:     * Priority determines the preference given to a network by {@code wpa_supplicant}
frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java: * Listens for events from the wpa_supplicant server, and passes them on
frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java:     * Names of events from wpa_supplicant (minus the prefix). In the
frameworks/base/wifi/java/android/net/wifi/WifiMonitor.java:                    if (false) Log.i(TAG, "Received wpa_supplicant event with empty event name");
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java:    /** The network id in the wpa_supplicant */
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java:     *  Note: The events formats can be looked up in the wpa_supplicant code
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java: * driver through wpa_supplicant and handles the event responses through WifiMonitor.
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java:    /* Two minutes comes from the wpa_supplicant setting */
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java:    /* Service discovery request ID of wpa_supplicant.
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java:     * wpa_supplicant and mGroups.
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java:     * Update service discovery request to wpa_supplicant.
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pService.java:     * Clear service discovery request in wpa_supplicant
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java:    // These definitions match the ones in wpa_supplicant
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java:     *  Note: The events formats can be looked up in the wpa_supplicant code
frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java:     *  Note: The events formats can be looked up in the wpa_supplicant code
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java:     * Return wpa_supplicant request string.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.java:     * @return wpa_supplicant request string.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceResponse.java:     * @param supplicantEvent wpa_supplicant event string.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo.java:     * Create wpa_supplicant service query for upnp.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo.java:     * @return wpa_supplicant service query for upnp
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java:     * Create wpa_supplicant service query for PTR record.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java:     * @return wpa_supplicant service query.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java:     * Create wpa_supplicant service query for TXT record.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.java:     * @return wpa_supplicant service query.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java:     * the list of query string for wpa_supplicant
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java:     * @param queryList query string for wpa_supplicant
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java:    * Return the list of the query string for wpa_supplicant.
frameworks/base/wifi/java/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.java:    * @return the list of the query string for wpa_supplicant.
frameworks/base/wifi/java/android/net/wifi/WifiConfigStore.java:     * when restoring an old wpa_supplicant.conf or upgrading from a previous
frameworks/base/wifi/java/android/net/wifi/WifiConfigStore.java:     * @param netId the wpa_supplicant's net ID
frameworks/base/wifi/java/android/net/wifi/WifiConfigStore.java:        // Now tell the wpa_supplicant the new configuration values.
frameworks/base/wifi/java/android/net/wifi/WifiNative.java:     * MASK=<N> see wpa_supplicant/src/common/wpa_ctrl.h for details
frameworks/base/core/java/android/provider/Settings.java:         * Whether wpa_supplicant will connect to access point automatically
frameworks/base/core/java/android/provider/Settings.java:         * wpa_supplicant will connect to access point automatically
frameworks/base/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java:        // enable Wifi and verify wpa_supplicant is started
frameworks/base/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiConnectionTest.java:        assertTrue("wpa_supplicant is not started ", mAct.mWifiManager.pingSupplicant());
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java:    private static final String FILE_WIFI_SUPPLICANT = "/data/misc/wifi/wpa_supplicant.conf";
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java:            "/system/etc/wifi/wpa_supplicant.conf";
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java:            Log.w(TAG, "Couldn't copy wpa_supplicant file");

 

 

 


 

 

grep 是一个在文件中搜索字符串模板的命令。它可以在一个或多个文件中搜索指定字符串,并将搜索结果输出到屏幕上,而不会影响原文件内容。Linux 使用 GNU 版本的 grep,它功能更强大,可以通过不同的命令行选项来使用 egrep 和 fgrep 的功能。egrepgrep 的扩展版本,支持更多的正则表达式元字符,而 fgrep 则将所有字母都看作单词,不再特殊对待正则表达式中的元字符。如果我们要在指定目录查找符合条件的文件,可以使用 grep 的 -r 选项,后面跟上关键字和目录名,这样就可以递归地搜索指定目录下所有包含关键字的文件了。例如,要在 /home/ 目录查找包含 "hello" 字符串文件,可以使用命令 grep -r "hello" /home/。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [7.Linux文件管理命令---grep查找字符串](https://blog.csdn.net/u014096024/article/details/128424973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Linux命令之查找字符串grep](https://blog.csdn.net/cnds123321/article/details/124967052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值