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

            久久97久久97精品免视看| 9191精品国产免费久久| 亚洲精品国产第一综合99久久| 久久丝袜精品中文字幕| 蜜桃麻豆www久久国产精品| 久久亚洲精品国产亚洲老地址| 99久久精品国产一区二区| 97久久精品午夜一区二区| 久久这里有精品视频| 久久久久波多野结衣高潮| 久久福利青草精品资源站| 国产精品99久久久精品无码| 精品久久久久久久久午夜福利| 国内精品久久久久久中文字幕| 伊人久久大香线蕉av一区| 久久99精品久久久久久野外| 久久人人爽人人爽人人片AV不| 久久久久久A亚洲欧洲AV冫| 国产精品久久久久久影院| 免费精品久久天干天干| 精品久久久久久国产牛牛app| 国产人久久人人人人爽| 狠狠精品久久久无码中文字幕| 久久久久亚洲精品男人的天堂| 久久99国产综合精品| 亚洲精品国产字幕久久不卡| 久久婷婷五月综合97色直播| 国产叼嘿久久精品久久| 久久99精品国产| 日韩欧美亚洲综合久久影院d3| 久久久精品国产sm调教网站 | 欧美伊人久久大香线蕉综合69| 国产成人久久AV免费| 97久久超碰国产精品旧版| 久久精品国产亚洲AV无码麻豆 | 99久久精品久久久久久清纯| 久久国产精品99久久久久久老狼| 久久久久亚洲av无码专区喷水| 久久人人爽人人爽人人AV| 精品久久无码中文字幕| 亚洲狠狠久久综合一区77777|