sed(流編輯器)入門 sed 是 stream editor(流編輯器)的縮寫。它能夠完美配合Regex使用。sed命令眾所周知的一個功能是文本的替換。 1、sed可以替換給定文本中的字串。它可以配合Regex來進行匹配: $ sed ' s/pattern/replace_string/ ' file 或者 $ cat file | sed sed ' s/pattern/replace_string/ ' //這個命令從stdin中讀取輸入 使用 -i 選項可以將替換結果應用於源檔案。一般在進行替換後利用重新導向來儲存檔案。 $ sed ' s/pattern/replace_string/ ' file > newfile 用新檔案來替換源檔案:$ mv newfile file 也可以用一行命令來完成: $ sed -i ' s/pattern/replace_string/ ' file sed ' s/pattern/replace_string/ ' file 可以將每行中第一處匹配樣式的內容替換掉,要想把所有符合的字元都替換掉,需要在命令尾部加上參數 g,如下 sed ' s/pattern/replace_string/g ' file 尾碼/g表示sed會替換每一處匹配。 當不需要每處替換時,可以選用/Ng來選擇從第N處開始替換,如下: sed ' s/pattern/replace_string/Ng' file $ echo hello hello hellohello | sed 's/hello/HELLO/2g' $ hello HELLO HELLOHELLO // 輸出結果 字元/ 在sed中起到定界符作用,我們也可選用任意定界符 sed ' s:pattern:replace_string:g ' sed ' s|pattern|replace_string|g' 當定界符出現在要匹配的樣式中時則需要用首碼 \ 來對其轉義: sed ' s;he\;llo;replace_string; ' 2、sed 命令包含多個可用於對文本處理的選項。將這些選項已合理的順序組合,可以在一行命令中解決很多複雜的問題。如下: a、移除空白行: 空白行可用'^$'進行匹配 $ sed '/^$/d' file b、已匹配字串標記(&) 在sed中,用&標記匹配樣式的字串,就能夠在替換字串時使用已匹配的內容。 $ echo this is an example | sed 's/\w\=/[&]/g' $ [this] [is] [an] [example] ps: \w為 Regex匹配字元(Perl風格的Regex),但是下表中的字元並不是所有的工具都支援 利用Regex\w\+匹配一個單詞,然後用 [ & ] 替換它。&對應於之前所匹配到的單詞。 c、子串匹配標記 \1 &代表匹配給定樣式的字串。我們也可以匹配給定樣式中的其中一部分。 $ echo this is digit 7 in a number | sed ' s/digit \([0-9]\)/\1/' $ this is 7 in a number 上述命令將digit 7 替換為7。樣式中匹配到的子串是7. $ echo seven EIGHT | sed 's/\([a-z]\+\) \([a-z]\+\)/\2 \1/' $ EIGHT seven ([a-z]\+) 匹配第一個單詞,([a-z]\+) 匹配第二個單詞。 \1和 \2用來引用它們。這種引用被稱為後向引用。 在替換部分,它們的次序被更改為\2 \1,因此結果就呈現出逆序的形式。 d、組合多個運算式 利用管道組合多個sed命令。 $ sed 'expression' | sed 'expression1' 等價於: $ sed 'expression; expression1' e、引用 sed運算式通常用單引號來引用。不過也可以使用雙引號。雙引號會通過對錶達式求值來對其進行擴充。 如: $ text=hello $ echo hello world | sed "s/$text/HELLO/" $ HELLO world $text 求值的結果是hello