shell sed命令匹配替换删除最后第一行字符正则表

作者: admin 分类: linux常用命令大全 发布时间: 2018-06-14 13:06

  只显示每行的第一个单词

  [root@localhost ~]# sed -r 's/([^0-9a-Z]+)(.+)//gp' passwd

  root

  bin

  daemon

  adm

  打印每行3次:sed 'p;p' passwd 每一个p代表一次打印,如果没有p则打印一遍,之后没多一个p就会多一次打印

  [root@localhost ~]# sed 'p;p' passwd

  root:x:0:0:root:/root:/bin/bash

  root:x:0:0:root:/root:/bin/bash

  root:x:0:0:root:/root:/bin/bash

  bin:x:1:1:bin:/bin:/sbin/nologin

  bin:x:1:1:bin:/bin:/sbin/nologin

  bin:x:1:1:bin:/bin:/sbin/nologin

  把所有大写字母用括号()括起来

  [root@localhost ~]# sed -r 's/[A-Z]/(&)/g' passwd

  root:x:0:0:root:/root:/bin/bash

  bin:x:1:1:bin:/bin:/sbin/nologin

  daemon:x:2:2:daemon:/sbin:/sbin/nologin

  adm:x:3:4:adm:/var/adm:/sbin/nologin

  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  ftp:x:14:50:(F)(T)(P) (U)ser:/var/ftp:/sbin/nologin

  用制表符替换文件中出现的所有空格

  [root@localhost ~]# sed -r 's/ /\t/g' passwd

  删除每行开头的所有空格:sed -r 's/^ //g' passwd

  删除一个文件中所有的数字:sed -r 's/[0-9]//g' passwd

  交换每行的第一个单词和最后一个单词:

  sed -r 's/^([a-Z0-9]+)([^a-Z0-9]+)(.+)([^a-Z0-9]+)([a-Z0-9]+)/\5\2\3\4\1/g' passwd

  交换每行的第一个字符和第二个单词:

  sed -r 's/^(.)([a-Z]+)([^0-9][^a-Z]+)([a-Z]+)([^0-9][a-Z])/\4\2\3\1\5/g' passwd

  交换每行的第一个字符和第二个字符:sed -r 's/^(.)(.)/\2\1/g' passwd

  删除文件每行的最后一个单词: sed -r 's/([a-Z]+)$' passwd

  删除文件每行的倒数第二个单词:

  sed -r 's/([a-Z]+)([^0-9][^a-Z])([a-Z]+)$/\2\3/g' passwd

  删除文件每行的第二个单词:sed -r 's/^([a-Z])([^0-9][^a-Z])(a-Z)/\1\2/g' passwd

  删除文件每行的倒数第二个字符: sed -r 's/(.)(.)$/\2/g' passwd

  删除文件每行的最后一个字符:sed -r 's/(.)$//g'

  删除文件每行的第二个字符:sed -r 's/^(.)(.)/\2/g' passwd

  删除文件每行的第一个字符:sed -r 's/^.//g' passwd

  用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式

  [root@localhost ~]# date "+%m/%y/%d" | sed -r 's/\//\-/g'

  06-18-12

  打印文件中第一行到4行的内容,且打印行号,当用到sed不同的编辑命令时,用{},且不同编辑命令之间

  用分号。

  [root@localhost ~]# sed -n '1,4{=;p}' passwd

  1

  root:x:0:0:root:/root:/bin/bash

  2

  bin:x:1:1:bin:/bin:/sbin/nologin

  3

  daemon:x:2:2:daemon:/sbin:/sbin/nologin

  4

  adm:x:3:4:adm:/var/adm:/sbin/nologin

  用!表示对前面的匹配的模式取反

  [root@localhost ~]# sed -n '1,2!{=;p}' passwd

  3

  daemon:x:2:2:daemon:/sbin:/sbin/nologin

  4

  adm:x:3:4:adm:/var/adm:/sbin/nologin

  5

  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  6

  sync:x:5:0:sync:/sbin:/bin/sync

  7

  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

  打印即匹配root字符的行,也打印匹配sbin字符的行

  [root@localhost ~]# sed -n '/root/,/sbin/p' passwd

  root:x:0:0:root:/root:/bin/bash

  bin:x:1:1:bin:/bin:/sbin/nologin

  operator:x:11:0:operator:/root:/sbin/nologin

  games:x:12:100:games:/usr/games:/sbin/nologin

  打印从第二行开始匹配到第一次出现root字符的行,root字符行也打印

  [root@localhost ~]# sed -n '2,/root/p' passwd

  bin:x:1:1:bin:/bin:/sbin/nologin

  daemon:x:2:2:daemon:/sbin:/sbin/nologin

  adm:x:3:4:adm:/var/adm:/sbin/nologin

  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  sync:x:5:0:sync:/sbin:/bin/sync

  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

  halt:x:7:0:halt:/sbin:/sbin/halt

  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

  operator:x:11:0:operator:/root:/sbin/nologin

  打印root行到第1行,由于root处在文件中的第一行位置,则表示只打印一行

  [root@localhost ~]# sed -n '/root/,1p' passwd

  root:x:0:0:root:/root:/bin/bash

  sed的匹配模式支持正则表达式

  sed'5 q'/etc/passwd#打印前5行

  sed-n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行

  sed-n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符

  sed-n '/o*/p'/etc/passwd#打印o字符重复任意次

  sed-n '/o\{1,\}/p'/etc/passwd#打印o字重复出现一次以上

  sed-n '/o\{1,3\}/p'/etc/passwd#打印o字重复出现一次到三次之间以上

  用sed打印文件的信息的例子的命令

  sed -n '/^#/!p' /etc/vsftpd/vsftpd.conf

  sed -n '/^#/!{/^$/!p}' /etc/vsftpd/vsftpd.conf

  sed -e '/^#/d' -e '/^$/d' /etc/vsftpd/vsftpd.conf

  sed -n '1,/adm/p' /etc/passwd

  sed -n '/adm/,6p' /etc/passwd

  sed -n '/adm/,4p' /etc/passwd

  sed -n '/adm/,2p' /etc/passwd

  sed命令可以实现的添加

  #1)匹配行的行首添加,添加在同行

  #2)匹配行的行中的某个字符后添加

  #3)匹配行的行尾添加字符

  #4)匹配行的行前面行添加

  #5)匹配行的行后面行添加

  #6)文件的行首添加一行

  [root@jie1 ~]# sed -i '1 i\sed command start' myfile

  #7)文件的行尾追加一行

  [root@jie1 ~]# sed -i '$a \sed command end' myfile

  sed命令实现对文件内容的替换(替换是在shell自动化脚本中用到最多的操作)

  [root@jie1 ~]# sed -i '/DEVICE/c\Ethernet' test

  #匹配DEVICE的行,替换成Ethernet这行

  [root@jie1 ~]# sed -i 's/static/dhcp/' test

  #把static替换成dhcp(/,@,#都是前面所说的地址定界符)

  [root@jie1 ~]# sed -i '/IPADDR/s@22\.1@10.12@' test

  #匹配IPADDR的行,把22.1替换成10.12由于.号有特殊意义所有需要转义

  [root@jie1 ~]# sed -i '/connect/s#YES#NO#' test

  #匹配connect的行,把YES替换成NO

  [root@jie1 ~]# sed -i 's/bin/tom/2g' test

  #把所有匹配到bin的行中第二次及第二次之后出现bin替换成tom

  [root@jie1 ~]# sed -i 's/daemon/jerry/2p' test

  #把所有匹配到bin的行中第二次出现的daemon替换成jerry,并在生产与匹配行同样的行

  [root@jie1 ~]# sed -i 's/adm/boss/2' test

  #把所有匹配到adm的行中仅仅只是第二次出现的adm替换成boss

  [root@jie1 ~]# sed -i '/root/{s/bash/nologin/;s/0/1/g}' test

  #匹配root的行,把bash替换成nologin,且把0替换成1

  [root@jie1 ~]# sed -i 's/root/(&)/g' test

  #把root用括号括起来,&表示引用前面匹配的字符

  [root@jie1 ~]# sed -i 's/BOOTPROTO/#BOOTPROTO/' test

  #匹配BOOTPROTO替换成#BOOTPROTO,在配置文件中一般用于注释某行

  [root@jie1 ~]# sed -i 's/ONBOOT/#&/' test

  #匹配ONBOOT的行的前面添加#号,在配置文件中也表示注释某行

  [root@jie1 ~]# sed -i '/ONBOOT/s/#//' test

  #匹配ONBOOT的行,把#替换成空,即去掉#号,也一般用作去掉#注释

  

Linux 命令大全

更多

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!