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

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            Sed --- 轉(zhuǎn)

            Sed是非交互式的行編輯器. 它即可以從stdin中接收文本輸入, 也可以從文件中接收文本輸入, 它對輸入中的指定行進(jìn)行特定的操作, 一行操作一次, 然后將結(jié)果輸出到stdout, 或輸出到文件中. 在shell腳本中使用的話, sed通常都是作為管道工具鏈中的一個處理部分來使用.

            Sed會決定它需要處理那些行, 因為sed的參數(shù)就包含有地址范圍. [1] 既可以通過行號來指定地址范圍, 也可以通過模式匹配來決定地址范圍. 比如, 3d表示sed會刪除輸入的第3行, /windows/d表示sed會刪除掉所有匹配"windows"的輸入行.

            對于sed工具包的所有操作來說, 我們最關(guān)心的其實就是3個最主要的操作. 分別是printing(打印到stdout), deletion(刪除), 和substitution(替換).


            表格 C-1. 基本sed操作

            操作符 名字 效果
            [地址范圍]/p 打印 打印[指定的地址范圍]
            [地址范圍]/d 刪除 刪除[指定的地址范圍]
            s/pattern1/pattern2/ 替換 將指定行中, 將第一個匹配到的pattern1, 替換為pattern2.
            [地址范圍]/s/pattern1/pattern2/ 替換 地址范圍指定的每一行中, 將第一個匹配到的pattern1, 替換為pattern2.
            [地址范圍]/y/pattern1/pattern2/ transform 地址范圍指定的每一行中, 將pattern1中的每個匹配到pattern2的字符都使用pattern2的相應(yīng)字符作替換. (等價于tr命令)
            g 全局 在每個匹配的輸入行中, 將每個模式匹配都作相應(yīng)的操作. (譯者注: 不只局限于第一個匹配)

             

            Note

            除非在替換命令的后邊明確指定選項g(全局), 否則的話, 替換操作只會替換掉每行上的第一個模式匹配實例.

            如果在命令行或腳本中使用這個命令, sed操作可能還需要某些選項和引用.

             

              1 sed -e '/^$/d' $filename
              2 # -e選項, 將會使得后邊的字符被看作為編輯指令. 
              3 #  (如果只給"sed"傳遞了單個指令, 那么"-e"是可選的.)
              4 #  "強(qiáng)"引用('')將會保護(hù)指令中的RE(正則表達(dá)式)字符串, 
              5 #+ 也就是防止腳本將RE重新解釋為特殊字符. 
              6 # (這會為sed命令, 保存指令的RE表達(dá)式.)
              7 #
              8 # 將會對文件$filename中的文本進(jìn)行操作. 

             

            在某些特定的情況下, sed編輯命令將不會和單引號的強(qiáng)引用一起工作.

             

              1 filename=file1.txt
              2 pattern=BEGIN
              3 
              4   sed "/^$pattern/d" "$filename"  # 工作正常. 
              5 # sed '/^$pattern/d' "$filename"    就會出現(xiàn)異常的結(jié)果. 
              6 #        在這個實例中, 被強(qiáng)引用(' ... ')引起的
              7 #+      "$pattern"就不會擴(kuò)展為"BEGIN". 

             

             

            Note

            Sed命令的-e選項表示后續(xù)的字符串是一個指令, 或指令集. 如果后續(xù)的字符串中只有一個指令, 那么-e選項可以被省略.

             

              1 sed -n '/xzy/p' $filename
              2 # -n選項會讓sed只打印那些匹配模式的行. 
              3 # 否則所有的輸入行都會被打印. 
              4 # 這里可以省略-e選項, 因為這里只有一個編輯指令. 

             


            表格 C-2. sed操作符舉例

            表示法 效果
            8d 刪除輸入的第8行.
            /^$/d 刪除所有空行.
            1,/^$/d 從輸入的開頭一直刪除到第1個空行(第一個空行也刪除掉).
            /Jones/p 只打印那些包含"Jones"的行(使用-n選項).
            s/Windows/Linux/ 在每個輸入行中, 將第一個出現(xiàn)的"Windows"實例替換為"Linux".
            s/BSOD/stability/g 在每個輸入行中, 將所有"BSOD"都替換為"stability".
            s/ *$// 刪除掉每行結(jié)尾的所有空格.
            s/00*/0/g 將所有連續(xù)出現(xiàn)的0都壓縮成單個的0.
            /GUI/d 刪除掉所有包含"GUI"的行.
            s/GUI//g 將所有"GUI"都刪除掉, 并保持剩余部分的完整性.

            在輸入行中, 將一個字符串替換為空字符, 等價于刪除這個字符串. 剩余部分會保持完整. 比如s/GUI//, 拿下邊這句為例:

            The most important parts of any application are its GUI and sound effects
            結(jié)果為:
            The most important parts of any application are its  and sound effects

             

            反斜線將會強(qiáng)制sed替換命令延續(xù)到下一行. 類似于, 在第一行的結(jié)尾使用換行作為替換字符串.

              1 s/^  */\
              2 /g
            這將每行開頭的空格用換行來替換. 最后的結(jié)果就是將每段的縮進(jìn)替換為一個空行.

             

            地址范圍后邊可以加上一系列操作, 這些操作可能需要放到大括號對中, 并且需要重起一行.

              1 /[0-9A-Za-z]/,/^$/{
              2 /^$/d
              3 }
            這只會刪除連續(xù)空行中的第一行. 對于單行間距的文本文件來說, 這很有用, 但是會保留段落間的空行.

            posted on 2009-09-05 00:13 大龍 閱讀(224) 評論(0)  編輯 收藏 引用

            欧美亚洲国产精品久久蜜芽| 99久久久精品| 色婷婷久久久SWAG精品| 色综合久久天天综线观看| 久久乐国产精品亚洲综合| 久久精品国产99国产精品导航| 亚洲人成网亚洲欧洲无码久久| 精品熟女少妇av免费久久| 久久人人爽人爽人人爽av | 久久99精品综合国产首页| 亚洲国产精品热久久| 久久精品国产精品亚洲精品 | www.久久精品| 日日狠狠久久偷偷色综合免费| 亚洲va久久久噜噜噜久久狠狠 | 思思久久99热只有频精品66| 97久久综合精品久久久综合| 午夜精品久久久久久久无码| 国内精品久久国产大陆| 久久人做人爽一区二区三区| 精品久久久久久久久久久久久久久 | 精品国产一区二区三区久久| 久久人做人爽一区二区三区| 蜜臀久久99精品久久久久久| 69SEX久久精品国产麻豆| 久久久久久久精品妇女99| 久久国产午夜精品一区二区三区| 国内精品人妻无码久久久影院| 伊人色综合久久天天人手人婷| 亚洲国产精品成人久久蜜臀| 精品久久久久久无码中文字幕| 国产亚洲欧美成人久久片| 久久精品无码专区免费青青| 亚洲va中文字幕无码久久| 新狼窝色AV性久久久久久| 中文字幕无码av激情不卡久久| 久久久久综合国产欧美一区二区| 亚洲成色999久久网站| 天天爽天天爽天天片a久久网| 久久综合久久综合久久| 四虎国产永久免费久久|