sed 命令使用及示例

sed 是一個用來篩選與轉換文本內容的工具。通常用來批量替換,刪除某行文件linux

sed 命令詳解

每一個 sed 命令,基本能夠由選項,匹配與對應的操做來完成git

# 打印文件第三行到第五行
# -n: 選項,表明打印
# 3-5: 匹配,表明第三行到第五行
# p: 操做,表明打印
$ sed -n '3,5p' file
 # 刪除文件第二行
# -i: 選項,表明直接替換文件
# 2: 匹配,表明第二行
# d: 操做,表明刪除
$ sed -i '2d' file
複製代碼

選項

-n: 打印匹配內容行 -i: 直接替換文本內容 -f: 指定 sed 腳本文件,包含一系列 sed 命令github

匹配

  • /reg/: 匹配正則
  • 3: 數字表明第幾行
  • $: 最後一行
  • 1,3: 第一行到第三行
  • 1,+3: 第一行,並再往下打印三行 (打印第一行到第四行)
  • 1, /reg/ 第一行,併到匹配字符串行

操做

  • a: append, 下一行插入內容
  • i: insert, 上一行插入內容
  • p: print,打印,一般用來打印文件某幾行,一般與 -n 一塊兒用
  • s: replace,替換,與 vim 一致

sed examples

查看手冊

$ man sed
複製代碼

打印特定行

p 指打印shell

# 1p 指打印第一行
$ ps -ef | sed -n 1p
UID        PID  PPID  C STIME TTY          TIME CMD
 # 2,5p 指打印第2-5行
$ ps -ef | sed -n 2,5p
root         1     0  0 Sep29 ?        00:03:42 /usr/lib/systemd/systemd --system --deserialize 15
root         2     0  0 Sep29 ?        00:00:00 [kthreadd]
root         3     2  0 Sep29 ?        00:00:51 [ksoftirqd/0]
root         5     2  0 Sep29 ?        00:00:00 [kworker/0:0H]
複製代碼

打印最後一行

$ 指最後一行vim

注意須要使用單引號bash

$ ps -ef | sed -n '$p'
複製代碼

刪除特定行

d 指刪除服務器

$ cat hello.txt
hello, one
hello, two
hello, three
 # 刪除第三行內容
$ sed '3d' hello.txt
hello, one
hello, two
複製代碼

過濾字符串

grep 相似,不過 grep 能夠高亮關鍵詞app

$ ps -ef | sed -n /ssh/p
root      1188     1  0 Sep29 ?        00:00:00 /usr/sbin/sshd -D
root      9291  1188  0 20:00 ?        00:00:00 sshd: root@pts/0
root      9687  1188  0 20:02 ?        00:00:00 sshd: root@pts/2
root     11502  9689  0 20:08 pts/2    00:00:00 sed -n /ssh/p
root     14766     1  0 Sep30 ?        00:00:00 ssh-agent -s
 $ ps -ef | grep ssh
root      1188     1  0 Sep29 ?        00:00:00 /usr/sbin/sshd -D
root      9291  1188  0 20:00 ?        00:00:00 sshd: root@pts/0
root      9687  1188  0 20:02 ?        00:00:00 sshd: root@pts/2
root     12200  9689  0 20:10 pts/2    00:00:00 grep --color=auto ssh
root     14766     1  0 Sep30 ?        00:00:00 ssh-agent -s
複製代碼

刪除匹配字符串的行

$ cat hello.txt
hello, one
hello, two
hello, three
 $ sed /one/d hello.txt
hello, two
hello, three
複製代碼

替換內容

s 表明替換,與 vim 相似ssh

$ echo hello | sed s/hello/world/
world
複製代碼

添加內容

ai 表明在新一行添加內容,與 vim 相似工具

# i 指定前一行
# a 指定後一行
# -e 指定腳本
$ echo hello | sed -e '/hello/i hello insert' -e '/hello/a hello append'
hello insert
hello
hello append
複製代碼

替換文件內容

$ cat hello.txt
hello, world
hello, world
hello, world
 # 把 hello 替換成 world
$ sed -i s/hello/world/g hello.txt
 $ cat hello.txt
world, world
world, world
world, world
複製代碼

注意事項

若是想在 mac 中使用 sed,請使用 gsed 替代,否則在正則或者某些格式上擴展不全。

使用 brew install gnu-sed 安裝

$ echo "hello" | sed "s/\bhello\b/world/g"
hello
$ brew install gnu-sed
$ echo "hello" | gsed "s/\bhello\b/world/g"
world
複製代碼

參考

相關文章
相關標籤/搜索