正则表达式 —— Sed

Sed

Sed 类似于vim就是一个文本编辑器,按行来进行编辑和排序
Sed的原理:读取,执行,显示

读取:读取文本内容之后,读取到的内容存放到临时的缓冲区—模式空间

执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历执行,依次执行,从上往下执行

显示:执行完之后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定的文件中。只是操作,但是不最终写入文件,只展示结果,展示玩之后,模式空间的数据会立即删除。
 

*面  Sed文本内容处理工具

如文件过大怎么办:

*面  Sed文本内容处理工具

如文件过大怎么办:

Sed仅适用于中型文件,大型文件还是先分割

Sed

常用选项

sed  -e  '操作'  文件1  |  -e  '操作'  文件2

只对一个文件操作,可以不加 -e

 

  • -e:条件操作选项
  • -f:指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容
  • -i:立即生效,慎用
  • -n:显示script处理之后的内(可禁止默认输出)

常用操作符

 

  • s:替换指定的字符
  • a:增加,在当前行的下面插入指定内容(操作符要用单引号引起来)
  • d:删除指定的行
  • i:增加,在当前行的上面插入新的内容
  • c:替换整行(用的最多)
  • y:替换字符,但是替换前后的字符长度必须一致
  • p:打印
  • r:使用扩展正则

Sed核心作用就是改,删,增        Sed查功能没有Grep强大

 

sed  -n  'p'  ky30.txt  可以显示一行      

sed  -n  '='  ky30.txt  只输出行号   

sed  -n  'n=;p'  ky30.txt   既显示行号也显示内容


 Sed  查找过滤

文本过滤模式:对包含指定字符串的内容进行打印    

sed  -n  '/o/p'  ky30.txt    所有包含o的行会全部打印

运用基础正则表达式进行打印 

sed  -n  '/^root/p'  /etc/passwd   打印以root为开头的行

sed  -n  '/bash$/p'  /etc/passwd   打印以bash为结尾的行

 

用拓展正则:sed  -r  -n  ' '   /etc/passwd 

sed  -r  -n  '/(99:){2}/p'  /etc/passwd       (99:) :分组   {2}:出现两次  p:打印

打印包含两个99的所在行

在/etc/passwd 中过滤出要么是root开头,要么是以bash结尾的所在行 

sed  -r  -n  '/^root | bash$p'  /etc/passwd

Sed  删除

指定行号进行删除

sed  -n  '3d:p'  ky30.txt    删除第三行并打印

sed  -n  '1d;3d;p'  ky30.txt  删除第一行和第三行并打印

匹配字符串内容删除 

sed  '/o/d'  ky30.txt   把包含o的内容删除

sed  '/big/d'  ky30.txt   把包含big的内容删除

sed  '/big/!d'  ky30.txt  把除了big的行都删除

sed  '/one/,/six/d'  test.txt  把包含one到six的行都删除并打印剩余行
————————————————
版权声明:本文为CSDN博主「Gsning」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/khvbjhb/article/details/131924397

删除空行 

sed  '/^$/d'  ky30.txt  

* 面  免交互删除内容

怎么样不进入文件就能删除文件内的内容,即免交互删除

方法一:sed  -i  'd'  文件名 

方法二:cat  /dev/null  >  文件名

Sed 替换 

s:替换字符串      
c:整行替换
y:单字符替换,注意替换和被替换的两个字符长度要保持一致
l&:转换成小写的特殊符号,在使用时需要转义符 \

u&:转换成大写的特殊符号

g:全部替换,如果不加,只会更改首位字符

y:单字符替换  sed  'y/12/34/'  ky30.txt      y用的较少

例: 

sed  -n  's/root/test/p'  /etc/passwd  只替换当前行的第一个root

sed  -n  's/root/test/2p'  /etc/passwd  替换当前行两个root

sed  -n  's/root/test/gp'  /etc/passwd  把所有root都替换为test

把以root开头的行注释掉

sed  -n  '/^root/  s/^/#/p'  /etc/passwd 

字母字符大小写替换 

小写替换成大写   sed  's/[a-z]/\u&/g'  ky30.txt

大写替换小写       sed  's/[A-Z]/\l&\g'   ky30.txt

整行替换

 sed  '/abc/c  def '  ky30.txt   把abc替换成def

*面  查看11.30到12点的日志内容 

sed  -n  '/Jul  20  11:30:01/,/Jul  20  12:00:01/p'  var/log/messages

 

 

你可能感兴趣的:(正则表达式)