• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0

            sed 是一種UNIX/LINUX 平臺下的輕量級流編輯器,日常一般用于處理文本文件。sed 有許多很好的特性。首先,它相當小巧;其次, sed 可以配合強大的 shell 完成許多復(fù)雜的功能。在我看來,sed完全可以看成一個腳本解釋器,用類似于編程的手段完成許多事情。

            sed簡單示例

            sed命令的格式是
            sed [-options] [command] [stdin]
            比如這個例子
            $ sed –e ‘d’ ./Mydir/Myfile
            執(zhí)行該命令,將得不到任何輸出。在該例中,用一個編輯命令 'd' 調(diào)用 sed;sed 打開 ./Mydir/Myfile 將一行讀入其模式緩沖區(qū),執(zhí)行’d’(“刪除行”);然后打印模式緩沖區(qū)(緩沖區(qū)已為空);它對后面的每一行重復(fù)這些步驟,這不會產(chǎn)生輸出!
            對這個命令要說明的幾點是:首先,它根本沒有修改 ./Mydir/Myfile。這是因為 sed 是流處理器,它只讀取在命令行指定的文件,它不試圖修改該文件。其次, sed 是面向行的,'d' 命令不是簡單地告訴 sed 一下子刪除所有輸入數(shù)據(jù);相反,sed 逐行將 ./Mydir/Myfile 的每一行讀入其稱為模式緩沖區(qū)的內(nèi)部緩沖區(qū),一旦將一行讀入模式緩沖區(qū),它就執(zhí)行 'd' 命令,然后打印模式緩沖區(qū)的內(nèi)容。最后要注意的事是括起 'd' 命令的單引號的用法,這樣可以禁用 shell 擴展。

            指定sed的作用范圍

            看下面的三個例子
             $ sed –e ‘1d’ ./Mydir/Myfile
             $ sed –e ‘1,10d’ ./Mydir/Myfile
             $ sed –e ‘/begin/,/end/p’ ./Mydir/Myfile
            第一個例子說明只刪除./Mydir/Myfile第一行的緩沖,第二個例子將刪除第1~10行的緩沖。第三個例子最復(fù)雜,它定義了以字符串’begin’開始到’end’結(jié)束的作用范圍

            sed中的正則表達式

            sed支持正則表達式,比如
             $ sed –n -e ‘/regexp/p’ ./Mydir/Myfile
            比如要刪除所有的空行
             $ sed –e ‘/^$/d’ ./Mydir/Myfile
            sed中的一些特殊定義是
                規(guī)則 表達式    描述
                /./       將與包含至少一個字符的任何行匹配
                /../      將與包含至少兩個字符的任何行匹配
                /^#/      將與以 '#' 開始的任何行匹配
                /^$/      將與所有空行匹配
                /}^/      將與以 '}'(無空格)結(jié)束的任何行匹配
                /} *^/    將與以 '}' 后面跟有 零或多個空格結(jié)束的任何行匹配
                /[abc]/   將與包含小寫 'a'、'b' 或 'c' 的任何行匹配
                /^[abc]/  將與以 'a'、'b' 或 'c' 開始的任何行匹配

            再比如一個經(jīng)典的例子,打印c源代碼中的main函數(shù)內(nèi)容,其命令可以寫成如下
             $ sed –n –e ‘/main[[:space]]*(/,/^}/p’ ./Mydir/*.c
            其中[:space]表示空格,[[:space]]*表示有0~多個空格,所以main[[:space]]*(的意思是匹配“main (”字符串;“^}”表示這一行有且只有一個字符}。當然,上面的命令不是十分嚴謹。

            sed –e ‘s/regexp/repalcement’ file

            替換是sed命令中最常用的命令,比如如下的例子
             $ sed –e ‘s/a/b’ ./Mydir/Myfile
             $ sed –e ‘s/a/b/g’ ./Mydir/Myfile
            第一個命令將./Mydir/Myfile中每一行第一次出現(xiàn)的字符a替換成字符b;第二個命令由于加入了’/g’,表示是全局(全部)替換字符a成字符b。

            經(jīng)常還可以看見如下兩種形式的sed
             $ sed –e ‘1,10s/a/b’ ./Mydir/Myfile
             $ sed –e ‘/^$/,/^END/s/a/b/g’ ./Mydir/Myfile
            第一個命令是指替換1~10行;第二個命令是指全局替換從空行開始到以END開始的行中的內(nèi)容。

            替換命令不一定非要以/分隔,比如
             $ sed –e ‘s:usr/local:/usr:g’ ./Mydir/Myfile
            就是將./Mydir/Myfile中的usr/local全部替換成/usr

            要用好替換命令,當然要使用正則表達式,除了上面所說的表達式的例子,還有一些是非常有用的
                字符類   描述
                [:alnum:]  字母數(shù)字 [a-z A-Z 0-9]
                [:alpha:]  字母 [a-z A-Z]
                [:blank:]  空格或制表鍵
                [:cntrl:]  任何控制字符
                [:digit:]  數(shù)字 [0-9]
                [:graph:]  任何可視字符(無空格)
                [:lower:]  小寫 [a-z]
                [:print:]  非控制字符
                [:punct:]  標點字符
                [:space:]  空格
                [:upper:]  大寫 [A-Z]
                [:xdigit:]  十六進制數(shù)字 [0-9 a-f A-F]

            比如下面這個例子
             $ sed –e ‘s/<[^>]*>//g’ ./Mydir/Myfile
            < [^>]*>匹配<…>這樣的字符串(…中不含>)。運行這個命令,能夠?qū)?“<b>This</b> is what <b>I</b> meant.”這樣的字符串替換成“This is what I meant.”

            考察如下的命令
             $ sed -e 's/.*/# &/' ./Mydir/Myfile
            這個命令將所有的非空行以“#”注釋掉——&告訴sed在行首插入字符。

            ‘s///’允許我們在規(guī)則表達式中定義區(qū)域,然后可以在替換字符串中引用這些特定區(qū)域。這些區(qū)域是以\(和\)隔開的。
            比如定義三個匹配非空字符的區(qū)域'\(.*\) \(.*\) \(.*\)',現(xiàn)在可以定義這三個區(qū)域的動作,比如
             $ sed -e 's/\(.*\) \(.*\) \(.*\)/PreFix \1-\2 Fix \3/' ./Mydir/Myfile
            假如把三個區(qū)域分別命名為a、b、c,則最后結(jié)果是 PreFix a-b Fix c

            sed中組合命令

            sed中的命令可以組合,以;號隔開,比如
             $ sed –n –e ‘=;p’ ./Mydir/Myfile
            =表示打印行號,p表示打印。對于更復(fù)雜的指令,則可以寫成命令腳本,然后用-f選項導(dǎo)入,比如
             $ sed –n –f MyScript.sed ./Mydir/Myfile
            對于同一個地址上的操作,則可以用{}組合,比如
             $ sed –n ‘1,20{ s/samba/Samba/g  s/posix/POSIX/g }’ ./Mydir/Myfile

            sed中的行附加命令

            在當前行之前插入行“i\”,如果要插入多行,則將多行用\分隔
            在當前行之后插入行“a\”,用法和上面相似
            更改當前行“c\”

            posted on 2009-04-01 11:53 chatler 閱讀(531) 評論(0)  編輯 收藏 引用 所屬分類: Shell
            <2009年12月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            青春久久| 久久久久九九精品影院| 五月丁香综合激情六月久久 | 亚洲欧美国产日韩综合久久| 青草久久久国产线免观| 久久不见久久见免费视频7| 久久精品国产只有精品66| 99精品国产免费久久久久久下载| 国产成人精品白浆久久69| 亚洲美日韩Av中文字幕无码久久久妻妇 | 香蕉久久夜色精品国产尤物| 91精品国产乱码久久久久久| 亚洲欧美一级久久精品| 久久精品嫩草影院| 色诱久久久久综合网ywww| 久久精品无码一区二区三区日韩| 久久精品国产亚洲AV无码偷窥| 无码人妻久久一区二区三区蜜桃| 国产欧美久久久精品| 无码AV波多野结衣久久| 无码任你躁久久久久久久| 品成人欧美大片久久国产欧美...| 亚洲精品乱码久久久久久| 国产精品一区二区久久精品涩爱| 国产精品成人无码久久久久久 | 久久久这里有精品中文字幕| 成人妇女免费播放久久久| 99精品国产综合久久久久五月天| 一本久久a久久精品综合香蕉| 久久人人爽人人爽人人片AV东京热 | 成人资源影音先锋久久资源网| 久久久久久精品免费免费自慰| 热久久国产欧美一区二区精品| 久久无码av三级| 国产亚洲精午夜久久久久久| 久久精品国产一区二区三区| 久久久久黑人强伦姧人妻| 亚洲欧美精品一区久久中文字幕 | 久久亚洲色一区二区三区| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 国产99久久久久久免费看 |