狂欢‰一夜 发表于 2018-5-24 10:38:40

Linux sed命令小结

  1.什么是sed

  sed,流编辑器,即stream editor。它可以将文本文件的每一行读取到内存,即所谓sed的模式空间,在这个模式空间中可以进行编辑并输出。
  

  2.sed的使用格式
  
sed "AdressCommand" file1,file2,...  

  说明:
  a.Adress实际上是用来确定编辑文件的范围,可以是精确的某一行,也可以是从某一行到某一行,也   可以用正则进行过滤匹配。
  

  b.Command表示将符合Address的行进行XXX操作。注意默认情况下,sed只对模式空间的内容进行编辑并不会直接处理文本文件。
  

  c.常用options有,-n (表示静默模式), -i(将对文本文件中的内容进行直接修改) 等。
  

  3.sed的使用心得
  
  心得一:如果我们不给address,那么表示全部,p命令表示print pattern space,因此会打印两份。p命令常与-n选项进行配合。
  
# sed 'p' /etc/fstab
LABEL=/               /                     ext3    defaults      1 1
LABEL=/               /                     ext3    defaults      1 1
LABEL=/home             /home                   ext3    defaults      1 2
LABEL=/home             /home                   ext3    defaults      1 2
LABEL=/boot             /boot                   ext3    defaults      1 2
LABEL=/boot             /boot                   ext3    defaults      1 2
tmpfs                   /dev/shm                tmpfs   defaults      0 0
tmpfs                   /dev/shm                tmpfs   defaults      0 0
devpts                  /dev/pts                devptsgid=5,mode=6200 0
devpts                  /dev/pts                devptsgid=5,mode=6200 0
sysfs                   /sys                  sysfs   defaults      0 0
sysfs                   /sys                  sysfs   defaults      0 0
proc                  /proc                   proc    defaults      0 0
proc                  /proc                   proc    defaults      0 0
LABEL=SWAP-sda5         swap                  swap    defaults      0 0
LABEL=SWAP-sda5         swap                  swap    defaults      0 0
# sed -n 'p' /etc/fstab
LABEL=/               /                     ext3    defaults      1 1
LABEL=/home             /home                   ext3    defaults      1 2
LABEL=/boot             /boot                   ext3    defaults      1 2
tmpfs                   /dev/shm                tmpfs   defaults      0 0
devpts                  /dev/pts                devptsgid=5,mode=6200 0
sysfs                   /sys                  sysfs   defaults      0 0
proc                  /proc                   proc    defaults      0 0
LABEL=SWAP-sda5         swap                  swap    defaults      0 0
#  

  

  心得二:Address常用的表示法有
  startLine,endLine

  startLine,+length
  /regexp1/,/regexp2/
  lineNumber
  /regexp/
  另外$表示最后一行
  
# sed -n '1,3p' /etc/fstab
LABEL=/               /                     ext3    defaults      1 1
LABEL=/home             /home                   ext3    defaults      1 2
LABEL=/boot             /boot                   ext3    defaults      1 2
# sed -n '1,$p' /etc/fstab
LABEL=/               /                     ext3    defaults      1 1
LABEL=/home             /home                   ext3    defaults      1 2
LABEL=/boot             /boot                   ext3    defaults      1 2
tmpfs                   /dev/shm                tmpfs   defaults      0 0
devpts                  /dev/pts                devptsgid=5,mode=6200 0
sysfs                   /sys                  sysfs   defaults      0 0
proc                  /proc                   proc    defaults      0 0
LABEL=SWAP-sda5         swap                  swap    defaults      0 0
# sed -n '/^tmpfs/,/^proc/p' /etc/fstab
tmpfs                   /dev/shm                tmpfs   defaults      0 0
devpts                  /dev/pts                devptsgid=5,mode=6200 0
sysfs                   /sys                  sysfs   defaults      0 0
proc                  /proc                   proc    defaults      0 0
# sed -n '2,+3p' /etc/fstab
LABEL=/home             /home                   ext3    defaults      1 2
LABEL=/boot             /boot                   ext3    defaults      1 2
tmpfs                   /dev/shm                tmpfs   defaults      0 0
devpts                  /dev/pts                devptsgid=5,mode=6200 0  

  心得三:默认基本正则,支持扩展正则-r。分组及引用的概念也都适用。
  
# sed -n '/boot/p' /etc/fstab
LABEL=/boot             /boot                   ext3    defaults      1 2
# sed -n '/b..t/p' /etc/fstab
LABEL=/boot             /boot                   ext3    defaults      1 2
# sed -n '/bo\{2,\}t/p' /etc/fstab
LABEL=/boot             /boot                   ext3    defaults      1 2
# sed -nr '/bo{2,}t/p' /etc/fstab
LABEL=/boot             /boot                   ext3    defaults      1 2  

  心得四:常用COMMAND总结
  
  d:delete current pattern space
  p:print pattern space

  a \string:append string to current pattern space

  i \string:insert string to current pattern space

  r file:read file content and append to current pattern space

  w file:write current pattern space to file

  s /regexp/string/:find lines that match the regexp and replace with the string in first

  s /regexp/string/g:global
  s /regexp/string/i:ingore case

  s #regexp#string#:this # equals /
  

  

  
页: [1]
查看完整版本: Linux sed命令小结