• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            sed 特殊用法

            Posted on 2010-01-19 10:36 Prayer 閱讀(429) 評論(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
            注意變換關系是按兩個list的位置對應變換,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

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

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

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

            3.刪除連續重復行(大量使用了pattern space 文件太大時要注意)
            代碼:
            sed '$!N; /^\(.*\)\n\1$/!P; D'
            #使用 $!N 要當心內存溢出
            舉例
            代碼:
            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
            執行命令后
            1234567890 0987654321

            5.將以\符號結尾的行與下行合并并以空格分隔(拼接斷行)
            代碼:
            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.按關鍵字拼接行
            如果某行以=開始,則合并到上一行并替代=為空格
            代碼:
            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.刪除文檔中某標志區域內的關鍵字匹配行
            刪除文檔中從being開到end結束的塊中包含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∧| 色综合久久88色综合天天| 精品久久久久久无码专区| 国产成人精品白浆久久69| 久久se精品一区精品二区| 久久精品无码一区二区日韩AV | 亚洲国产高清精品线久久 | 粉嫩小泬无遮挡久久久久久| 久久亚洲国产午夜精品理论片| 国产精品九九久久精品女同亚洲欧美日韩综合区| 精品久久香蕉国产线看观看亚洲 | 久久久受www免费人成| 精品一二三区久久aaa片| 国产99久久九九精品无码| 久久久SS麻豆欧美国产日韩| 国产成人无码久久久精品一| 欧美日韩成人精品久久久免费看| 婷婷五月深深久久精品| 青草久久久国产线免观| 国产精品久久久久久久久免费| 色诱久久av| 久久精品国产99国产精品| 久久99国产综合精品女同| 久久人人爽人人爽人人片AV东京热 | 秋霞久久国产精品电影院| 婷婷国产天堂久久综合五月| 久久国产免费观看精品| 亚洲国产精品无码久久久不卡| 欧美激情精品久久久久久| 青青热久久综合网伊人| 久久久久亚洲精品天堂| 欧美丰满熟妇BBB久久久| 国产美女亚洲精品久久久综合| 久久精品无码一区二区三区日韩| 日本道色综合久久影院| 九九99精品久久久久久| 久久国产精品久久| 久久精品国产WWW456C0M| 久久国产成人亚洲精品影院| 狠狠久久综合伊人不卡|