<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 閱讀(1259) 評論(0)  編輯  收藏 所屬分類: C&C++Linux

    主站蜘蛛池模板: 亚洲色精品88色婷婷七月丁香| 亚洲韩国在线一卡二卡| 中文字幕av免费专区| 亚洲高清在线视频| 国产精品1024永久免费视频| 亚洲丰满熟女一区二区哦| 亚洲精品久久久www| 亚洲视频免费观看| 永久免费观看黄网站| 亚洲黄色片在线观看| 免费国产不卡午夜福在线| 日韩内射激情视频在线播放免费| 亚洲国产精品自在自线观看| 亚洲一区无码中文字幕| 成年女人毛片免费观看97| a级毛片免费全部播放无码| 亚洲综合偷自成人网第页色| 亚洲中文字幕无码久久综合网| 黄瓜视频高清在线看免费下载| 中文字幕在线免费看| 亚洲人成电影院在线观看| 亚洲精品国产va在线观看蜜芽| 三年片在线观看免费观看大全一| 亚洲av无码成人精品国产 | 久久国产色AV免费看| 色天使亚洲综合一区二区| 67pao强力打造67194在线午夜亚洲| 免费人妻无码不卡中文字幕18禁| 亚洲精品视频免费在线观看| 久久er国产精品免费观看8| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲电影在线免费观看| 亚洲精品色午夜无码专区日韩| 小小影视日本动漫观看免费| 曰批视频免费40分钟试看天天| 久久成人永久免费播放| 激情小说亚洲图片| 国产成人精品日本亚洲专区6| 亚洲AV日韩AV永久无码久久| 亚洲综合久久夜AV | 五月天婷亚洲天综合网精品偷|