正则表达式 —— Sed

Sed

Sed 类似于vim就是一个文本编辑器,按行来进行编辑和排序

Sed的原理:读取,执行,显示

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

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

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

*面 Sed文本内容处理工具

如文件过大怎么办:

首先split -l 或 split -b 进行切割

cat 文件名 | 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的行都删除并打印剩余行

删除空行

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

相关推荐
梦里不知身是客111 天前
正则表达式常见的介绍
前端·javascript·正则表达式
狮智先生2 天前
【编程实践】正则表达式的使用
正则表达式
MM_MS4 天前
正则表达式超详细版
正则表达式
m0_488777654 天前
正则表达式与文本处理器以及命令小工具
正则表达式·命令小工具
青衫码上行6 天前
【Java Web学习 | 第14篇】JavaScript(8) -正则表达式
java·前端·javascript·学习·正则表达式
beijingliushao7 天前
95-Python爬虫-正则表达式
爬虫·python·正则表达式
前端 贾公子7 天前
正则表达式(/g修饰符)踩坑
正则表达式
q***84577 天前
Java进阶,时间与日期,包装类,正则表达式
java·mysql·正则表达式
非得登录才能看吗?14 天前
正则表达式入门
正则表达式
小飞大王66614 天前
JavaScript基础知识总结(四):常见内置构造函数,正则表达式,作用域与闭包
前端·javascript·正则表达式