<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    Linux下修改后的ps命令,很好很強大!

    今天在linux下寫了個小程序,功能是:利用ps來查找包含當前字符串的所有命令,有時候會得到很多搜索結果,而且由于每個命令附帶的參數很長,導致很亂很難以分清楚,下面這個程序會將匹配得到的結果每隔一行輸出,而且搜索詞會以紅色加粗顯示,并且搜索結果會被兩條彩色線條分隔出來,該彩色線條的顏色和線型也都是隨機變換的,這么做的目的是為了防止在一屏內的兩次結果的四條線之間混亂,用不同顏色和線型加以區分會非常清晰明了,而且該彩色線條的長度是與你的終端寬度相匹配的;后續又改進了一下,比如你搜索mps Sh,那么可以為你搜索出mps SH;mps sh; mps sH; mps Sh四種結果的并集。

    先看一下shell版本的:
    #!/bin/bash

    if [ "$#" -ne "1" ];then
        echo "Usage: my <SearchWord>"
        exit 1
    fi

    COLORTYPE=$((32+RANDOM%5))
    lineArray=('=' '-' '#' '%' '~' '/')
    LINETYPE=${lineArray[$((RANDOM%6))]}

    echo -e "\033[1;${COLORTYPE}m`python -c "print ""'"${LINETYPE}"'"*$(echo  $(stty size) | cut -d' ' -f2)`\033[0m"
    echo
    ps aux | grep -i $1 | awk "!/grep/&&!/mps.*$1/&&!/sed.*$1.*1;31m.*g/{print \$0 \"\n\" }" | sed -e "s/\($1\)/$(echo -e '\033')\[1;31m\1$(echo -e '\033')\[0m/gi"
    #需要說明的是,上面的$(echo -e '\033')完全可以由字符^[,注意這是一個字符,表示Esc那個鍵,在vi里可以通過Ctrl+v,然后再按Esc來輸入該特殊字符;這里用echo這么惡心的做法只是因為我如果寫^[這個字符,怕誤導大家以為是兩個字符,因此給出了一個通用的,不會有歧義的,但是也很丑陋的做法
    echo -e "\033[1;${COLORTYPE}m`python -c "print ""'"${LINETYPE}"'"*$(echo  $(stty size) | cut -d' ' -f2)`\033[0m"

    再給出c++版本的(其實上面的shell版本已經足夠了,不過當初我沒把shell實現的那么完整,后來才發現原來shell都可以實現之,因此下面的 c++版本純粹是為了自我留念之用,大家可以不必看了,呵呵):
    #include <termio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <sstream>
    #include <string>
    #include <time.h>

    using namespace std;

    enum Color
    {
        GREEN = 32,
        YELLOW = 33,
        BLUE = 34,
        MAUVE = 35,
        CYANINE = 36
    };

    enum LineStyle
    {
        EQUAL = (uint32_t) '=',
        TILDE = (uint32_t) '~',
        ASTERISK = (uint32_t) '*',
        MINUS = (uint32_t) '-',
        POUND = (uint32_t) '#',
        SLASH = (uint32_t) '/'
    };

    uint32_t ChooseColor()
    {
        srand(static_cast<unsigned>(time(0)));

        switch(rand()%5)
        {
        case 0:
            return GREEN;
            break;
        case 1:
            return YELLOW;
            break;
        case 2:
            return BLUE;
            break;
        case 3:
            return MAUVE;
            break;
        default:
            return CYANINE;
            break;
        }

        return GREEN;
    }

    uint32_t ChooseLineStyle()
    {
        srand(static_cast<unsigned>(time(0)));

        switch(rand()%6)
        {
        case 0:
            return EQUAL;
            break;
        case 1:
            return TILDE;
            break;
        case 2:
            return ASTERISK;
            break;
        case 3:
            return MINUS;
            break;
        case 4:
            return POUND;
            break;
        default:
            return SLASH;
            break;
        }

        return EQUAL;
    }

    int main(int argc, char* argv[])
    {
        if (2 != argc)
        {
            cout << "Usage: mps <SearchWord>" << endl;
            return 1;
        }

        struct winsize wsz;
        ioctl(STDOUT_FILENO, TIOCGWINSZ, (char*) &wsz);

        stringstream seperatorLine;
        seperatorLine << "echo """ << (char)27 << "[1;" << ChooseColor() << 'm'
        << string("").append(wsz.ws_col, (char)ChooseLineStyle()) << char(27) << "[0m""";

        char psCommand[1024] = {0};
        sprintf(psCommand,"ps aux | grep %s | grep -v grep | grep -v 'mps.*%s' | grep -v 'sed.*%s.*""[1;31m%s.*g' | "
                    "awk '{print $0 """"n""}' | sed ""s/%s/%c""[1;31m%s%c""[0m/g""",
                    argv[1], argv[1], argv[1], argv[1], argv[1], (char)27, argv[1], (char)27);

        system(seperatorLine.str().c_str());
        system("echo");
        system(psCommand);
        system(seperatorLine.str().c_str());

        return 0;
    }

    最后給出使用方法,不論是shell版本的還是binary版本的,都需要其有可執行權限,我是將其拷貝到/usr/bin目錄下了,這樣大家就都可以使用該程序了:mps vmware即可; 后來又想到更簡單的辦法,直接在.bashrc中定義個函數叫mps即可,把上面的shell代碼copy到函數體里面(將exit 1換為return)就ok了。

    posted on 2009-06-13 03:34 so true 閱讀(1263) 評論(0)  編輯  收藏 所屬分類: C&C++Linux

    主站蜘蛛池模板: 97亚洲熟妇自偷自拍另类图片| 免费国产在线观看不卡| 日韩精品亚洲专区在线影视| 亚洲国产精品VA在线看黑人| 国产aⅴ无码专区亚洲av| a级毛片免费网站| 精品亚洲成α人无码成α在线观看| 亚洲伊人久久大香线焦| 日韩版码免费福利视频| 亚洲免费视频观看| 最近2019中文字幕mv免费看| 亚洲色欲色欱wwW在线| 在线观看国产情趣免费视频| 免费国产在线精品一区| 亚洲男人av香蕉爽爽爽爽| 一级午夜免费视频| 国产成人精品日本亚洲网站| 麻豆成人久久精品二区三区免费| 久久久亚洲欧洲日产国码是AV| 99在线精品免费视频九九视| 国产AV无码专区亚洲精品| 免费不卡在线观看AV| 亚洲人成电影在线观看网| 久久久久久国产a免费观看黄色大片 | 免费成人av电影| 4hu四虎免费影院www| 亚洲精品免费视频| 免费三级毛片电影片| 亚洲AV无码一区二区三区电影 | 最近中文字幕国语免费完整 | 亚洲影视一区二区| 日韩在线免费播放| 久久国产福利免费| 亚洲国产模特在线播放| 又黄又爽无遮挡免费视频| 国产成人无码区免费内射一片色欲| 久久精品国产亚洲av日韩| 日韩免费三级电影| 嫩草在线视频www免费观看| 日韩亚洲不卡在线视频中文字幕在线观看 | 香蕉97碰碰视频免费|