正则表达式 —— 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

相关推荐
SunnyRivers20 小时前
基础爬虫案例实战
正则表达式·爬虫实战·多进程·requests
西洼工作室2 天前
【java 正则表达式 笔记】
java·笔记·正则表达式
kiss strong3 天前
正则表达式
正则表达式
Linux运维技术栈3 天前
Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
开发语言·python·正则表达式
jackiendsc3 天前
Java中正则表达式的介绍、使用场景及示例代码
java·开发语言·正则表达式
taller_20003 天前
VBA之正则表达式(48)-- 快速拆分中文语句
正则表达式·正则·拆分中文·中文拆分·中文标点
梧桐树04293 天前
python:正则表达式
数据库·python·正则表达式
葡萄架子3 天前
Python中的正则表达式
python·mysql·正则表达式
Oneforlove_twoforjob4 天前
【Java】正则表达式基础题+场景题练习
正则表达式
产幻少年4 天前
正则表达式
正则表达式