Cody Blog

sed的s指令筆記

s Command

s(substitue) 指令是 sed 中最常用的,可以把文件中的字串替換掉。基本的syntax s/RegEx/SubEx/,例如 s/Old/New/:

$ echo 'this is old' > input.txt
$ sed s/old/new/ input.txt

這個sed指令可以把文件中的old字串換成new

sed 執行流程

sed不像一般程式語言有 variable 的概念,但是sed有兩個特別的buffer(or workspace)可以讓sed執行較複雜的工作。這兩個buffer稱為Pattern spaceHold space。sed執行是從input stream中,每次執行一行,流程大致如下:

  1. sed從input stream讀一行的內容
  2. 把換行符號(trailing newlines)移除
  3. 把它放到pattern sapce
  4. 執行指令(上面的例子就是s command把old取代成new)
  5. 把換行符號(trailing newlines)補回來
  6. sed 把結果印到 output steam
  7. 如果還有input的話,就繼續執行step1,否則就結束

而pattern space在每一個迴圈都會清除,但是hold space則不會,可參考‘h’, ‘H’, ‘x’, ‘g’, ‘G’指令。

s 指令的其它選項

-e: sed script,可以連接多個 sed script,如果只有一個 sed script 則 -e 可以省略。例如: $ echo 1234567890 …