• <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 閱讀(434) 評論(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

            日本精品久久久久中文字幕| 亚洲国产成人精品91久久久| 久久99精品国产99久久| 91精品免费久久久久久久久| 亚洲欧美精品一区久久中文字幕| 久久热这里只有精品在线观看| 俺来也俺去啦久久综合网| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久精品国产99国产精品澳门| 精品免费久久久久国产一区| 日韩欧美亚洲综合久久| 久久精品国产99久久久香蕉 | 久久精品国产亚洲AV无码麻豆 | 中文字幕精品久久久久人妻| 久久综合丁香激情久久| 亚洲AV无码久久精品成人| 久久久精品久久久久久| 久久青青草原国产精品免费| 亚洲国产另类久久久精品| 精品久久久久久久久免费影院| 国产精品伦理久久久久久| 国内精品伊人久久久久| 久久久精品人妻一区二区三区蜜桃| 久久人人爽人人爽人人片AV东京热 | 久久国产视频网| 久久精品无码一区二区app| 国产成人久久精品麻豆一区| 久久久青草久久久青草| 2021久久国自产拍精品| 久久久噜噜噜久久中文福利| 久久亚洲美女精品国产精品| 欧美熟妇另类久久久久久不卡| 精品国产乱码久久久久软件| 亚洲国产精品狼友中文久久久| 久久精品一区二区三区中文字幕| 色综合久久综精品| 精品久久久无码中文字幕| 亚洲欧美一级久久精品| 伊人久久大香线蕉综合Av| 久久久久久久亚洲Av无码| 久久ZYZ资源站无码中文动漫|