正则sed和awk的用法

  

* sed可以实现一些grep的功能,但是稍微麻烦了一些,sed的强项在于删除文件中的内容和替换

  

<强> sed实现grep检索功能:

  

1。根据关键字检索:

  
 <代码> [root@localhost ~] # sed - n/根/p passwd。txt  
  

* 使用sed检索时需要在关键字前加- n参数,关键字后加p,关键词还需要用//包括起来

  

2。关键字有特殊符号时加上- r参数或使用脱义符

  
 <代码> [root@localhost ~] # sed nr/o + t/p passwd。txt  
  

3。打印指定行:(打印指定行时直接写行号即可,不需要加//符号括起来)

  
 <代码> [root@localhost ~] # sed - n ' 5 'p passwd.txt
  (root@localhost ~) # sed - n的5美元的p passwd。txt #打印第五行至最后一行代码 
  

4。- e参数:使用多个表达式:

  
 <代码> [root@localhost ~] # sed - e ' 1 'p - e '/根/p - n passwd。txt  
  

* 打印第一行内容并检索包含根的行,如果第一行同时包含根,那么第一行会被打印两次

  

5。不区分大小写:(加上大写的我)

  
 <代码> [root@localhost ~] # sed - n/testword/Ip passwd。txt  
  

<强> sed删除功能:

  

1。删除打印结果中指定的行:

  
 <代码> root@localhost ~ # wc - l passwd.txt
  22 passwd.txt
  #查看文件行数
  
  [root@localhost ~] # sed ' 1, 20 passwd.txt
  chrony: x: 998:996::/var/lib/chrony:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  #删除第1行,打印剩余的行
  
  # wc - l passwd.txt root@localhost ~
  22 passwd.txt
  #该操作不会真实删除文件内容,只是删除打印结果 
  

2。我参数:删除文件中指定的行(加上我参数后会真实删除文件内容)

  
 <代码> root@localhost ~ # wc - l passwd.txt
  22 passwd.txt
  (root@localhost ~) # sed - i ' 1, 20 passwd.txt
  # wc - l passwd.txt root@localhost ~
  2 passwd.txt  
  

* 用于在删除大日志文件内容时比较常用

  

<强> sed替换功能:

  

1。根据关键字替换:

  
 <代码> root@localhost ~ #猫passwd.txt
  chrony: x: 998:996::/var/lib/chrony:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  
  (root@localhost ~) # sed的s/chrony/sed_test/g passwd.txt
  sed_test: x: 998:996::/var/lib/sed_test:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash  
  

* 格式:' s/被替换关键字/替换内容/g”

  

2。特殊符号匹配时加- r参数:

  
 <代码> root@localhost ~ #猫passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  
  (root@localhost ~) # sed - r ' s/n + y/sed_test/g’passwd.txt
  sed_test: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash  
  

3。分段替换位置:

  
 <代码> root@localhost ~ #猫passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  
  (root@localhost ~) # sed - r ' s/([^:] +): (. *): ([^:] +)/\ 3: \ 2: \ 1/g’passwd.txt/sbin/nologin: x: 998:996::/var/lib/chronwy: nnnnny/bin/bash: x: 1000:1000::/home/linux01: linux01  
  

* 使用冒号分割为3段,将第三段和第一段位置互换

  

4。配置关键词为目录路径时加上脱义符或使用其他替换符号:

  
 <代码> root@localhost ~ #猫passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  
  (root@localhost ~) # sed ' s/\/bin \/bash AAAAAAA/g’passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01: AAAAAAA
  
  (root@localhost ~) # sed的#/bin/bash # AAAAAAA # g’passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01: AAAAAAA  
  

5。删除所有字母:

  
 <代码> root@localhost ~ #猫passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  
  (root@localhost ~) # sed的s/[a-zA-Z]//g passwd.txt
  ::998:996::///://01:1000:1000:://01:// 
  

6。在每行前添加内容:

  
 <代码> root@localhost ~ #猫passwd.txt
  nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  linux01: x: 1000:1000::/home/linux01:/bin/bash
  
  (root@localhost ~) # sed - r ' s/. */sed_test:和/g的passwd.txt
  sed_test: nnnnny: x: 998:996::/var/lib/chronwy:/sbin/nologin
  sed_test: linux01: x: 1000:1000::/home/linux01:/bin/bash 

正则sed和awk的用法