• <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>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            sed 特殊用法

            Posted on 2010-01-19 10:36 Prayer 閱讀(425) 評論(0)  編輯 收藏 引用 所屬分類: Shell
            一. 替換
            1.神奇變換(y命令的使用)
            代碼:
            sed 'y/ori_letter_list/target_letter_list/' filename
            代碼:
            cat filename
            1234567890
            2345678901
            3456789012
            4567890123
            測試
            將文件中1換成A
            將文件中2換成B
            ...
            將文件中0換成J
            代碼:
            sed 'y/1234567890/ABCDEFGHIJ/' filename
            ABCDEFGHIJ
            BCDEFGHIJA
            CDEFGHIJAB
            DEFGHIJABC
            注意變換關(guān)系是按兩個list的位置對應(yīng)變換,y是一個管局命令,拒絕使用后綴flag/g
            list1:1234567890
            list2:ABCDEFGHIJ
            下面再作一個與前例相反的變換
            代碼:
            sed 'y/0987654321/ABCDEFGHIJ/' filename
            JIHGFEDCBA
            IHGFEDCBAJ
            HGFEDCBAJI
            GFEDCBAJIH

            2.替換每行第一個匹配
            代碼:
            sed 's/regexpr/anyword/' filename
            sed 's/regexpr/anyword/1' filename
            舉例:
            引用:
            cat filename
            1234567890 2345678901
            3456789012 4567890123
            sed 's/5/五/' filename
            1234五67890 2345678901
            34五6789012 4567890123

            3.替換每行第n(如果有的話)個匹配
            代碼:
            sed "s/regexpr/anyword/${ n }" filename
            cat filename
            111111111111111111
            222222222222222222
            333333333333333333
            444444444444444444
            舉例
            sed "s/4/ 四 /8" filename
            111111111111111111
            222222222222222222
            333333333333333333
            4444444 四 4444444444

            4.替換每行所有匹配
            代碼:
            cat filename
            1234567890 2345678901
            3456789012 4567890123
            代碼:
            舉例:
            sed 's/3/三/g' filename
            12三4567890 2三45678901
            三456789012 456789012三

            二.行號處理
            1.為文件加行號
            代碼:
            sed = filename|sed 'N;s/\n/:/'
            cat filename
            111111111111111111
            222222222222222222
            333333333333333333
            444444444444444444
            舉例
            代碼:
            sed = filename|sed 'N;s/\n/:/' filename
            1:111111111111111111
            2:222222222222222222
            3:333333333333333333
            4:444444444444444444
            2.僅為文件中的正文行加行號
            代碼:
            sed /./= a|sed '/./N;s/\n/:/'
            舉例
            代碼:
            cat filename
            111111111111111111
            222222222222222222
            333333333333333333
            444444444444444444
            sed /./= a|sed '/./N;s/\n/:/' filename
            1:111111111111111111
            3:222222222222222222
            4:333333333333333333
            6:444444444444444444

            三.字串翻轉(zhuǎn)
            代碼:
            sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;s/.//'
            舉例
            代碼:
            echo 1234567890|sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;s/.//'
            0987654321

            四.選擇性輸出
            1.打印文檔奇數(shù)行(隔行輸出)
            代碼:
            sed 'n;d'
            sed 'x;$!N;x'
            sed -n 'p;n'
            1
            3
            5
            7

            2.打印偶數(shù)行(隔行輸出)
            代碼:
            sed -n 'n;p'
            sed '1d;n;d;'
            2
            4
            6
            8

            3.刪除連續(xù)重復行(大量使用了pattern space 文件太大時要注意)
            代碼:
            sed '$!N; /^\(.*\)\n\1$/!P; D'
            #使用 $!N 要當心內(nèi)存溢出
            舉例
            代碼:
            cat file
            111111111111111111
            222222222222222222
            222222222222222222
            333333333333333333
            444444444444444444
            444444444444444444
            444444444444444444
            444444444444444444
            444444444444444444
            sed '$!N; /^\(.*\)\n\1$/!P; D' filename
            111111111111111111
            222222222222222222
            333333333333333333
            444444444444444444

            4.合并上下行并以空格相分隔
            代碼:
            sed '$!N;s/\n/ /'
            舉例
            代碼:
            cat file
            1234567890
            0987654321
            執(zhí)行命令后
            1234567890 0987654321

            5.將以\符號結(jié)尾的行與下行合并并以空格分隔(拼接斷行)
            代碼:
            sed -e :a -e '/\\$/N; s/\\\n/ /; ta'
            舉例
            代碼:
            cat filename
            1 111111111111111111\
            2 222222222222222222
            3 333333333333333333\
            4 444444444444444444
            sed -e :a -e '/\\$/N; s/\\\n/ /; ta' filename
            1 111111111111111111 2 222222222222222222
            3 333333333333333333 4 444444444444444444

            6.按關(guān)鍵字拼接行
            如果某行以=開始,則合并到上一行并替代=為空格
            代碼:
            sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
            舉例
            代碼:
            cat file
            111111111111111111
            222222222222222222
            =333333333333333333
            444444444444444444
            sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' filename
            111111111111111111
            222222222222222222 333333333333333333
            444444444444444444

            7.輸出匹配行的下一行
            代碼:
            sed -n '/regexpr/{ n;p; }' filename
            舉例
            代碼:
            cat filename
            1 111111111111111111
            2 222222222222222222
            3 333333333333333333
            4 444444444444444444
            sed -n '/^3/{ n;p; }' filename
            4 444444444444444444

            8.顯示匹配行的行號并輸出匹配行的上行、匹配行、下行
            sed -n -e '/regexpr/{ =;x;1!p;g;$!N;p;D; }' -e h
            舉例
            代碼:
            cat filename
            1 111111111111111111
            2 222222222222222222
            3 333333333333333333
            4 444444444444444444
            sed -n -e '/^3/{ =;x;1!p;g;$!N;p;D; }' -e h filename
            3 #匹配行的行號
            2 222222222222222222 #上一行
            3 333333333333333333 #匹配行
            4 444444444444444444 #下一行

            9.刪除文檔中某標志區(qū)域內(nèi)的關(guān)鍵字匹配行
            刪除文檔中從being開到end結(jié)束的塊中包含myword的行
            代碼:
            sed '/^begin/,/^end/{ /myword/d; }' filename
            引用:
            cat filename
            myword
            begin
            myword
            Number!
            myword
            Number!
            myword
            Number!
            myword
            Number!
            end
            myword
            Number!
            測試
            引用:
            myword
            begin
            Number!
            Number!
            Number!
            Number!
            end
            myword
            Number!

            五.字串解析
            1.從字串中解析出兩個子串(前2各字符和后9個字符)
            代碼:
            echo "WeLoveChinaUnix"|sed -e 'H;s/\(..\).*/\1/;x;s/.*\(.\{ 9\ }\)$/\1/;x;G;s/\n/ /'
            We ChinaUnix

            2.分解日期串
            代碼:
            echo 20030922|sed 's/\(....\)\(..\)\(..\)/\1 \2 \3/'|read year month day
            echo $year $month $day
            2003 09 22

            來自:www.chinaunix.net
            作者:admirer

            Trackback: http://tb.donews.net/TrackBack.aspx?PostId=1075200

            亚洲∧v久久久无码精品| 久久久一本精品99久久精品88| 亚洲香蕉网久久综合影视| 国内精品久久久久影院日本 | 久久亚洲欧美日本精品| 久久综合色区| 久久er国产精品免费观看8| 99久久国产综合精品女同图片| 久久99国产综合精品女同| 久久成人国产精品二三区| 久久国产色AV免费看| 伊人久久大香线蕉AV一区二区| 久久精品9988| 久久久国产99久久国产一| 香蕉久久夜色精品国产2020| 久久伊人精品一区二区三区| 思思久久99热只有频精品66| 99国产精品久久| 国产精品久久99| 一本一本久久aa综合精品| 久久最新精品国产| 久久综合给合久久狠狠狠97色| 狠狠狠色丁香婷婷综合久久五月 | 亚洲国产天堂久久久久久| 久久国产欧美日韩精品| 久久亚洲精品成人AV| 久久无码一区二区三区少妇 | 99久久婷婷国产综合精品草原| 国产99久久九九精品无码| 狠狠色婷婷综合天天久久丁香| 亚洲国产精品无码久久98| 亚洲欧美日韩久久精品| 久久精品成人一区二区三区| 久久强奷乱码老熟女网站| 99久久婷婷国产综合精品草原| 夜夜亚洲天天久久| 香蕉久久夜色精品国产小说| 精品久久久久久国产91| 狠狠色婷婷综合天天久久丁香| 久久精品成人免费网站| 99久久伊人精品综合观看|