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

相关推荐
htj101 天前
C# 使用正则表达式
正则表达式·c#
ZZZKKKRTSAE1 天前
快速上手Linux全局搜索正则表达式(grep)
linux·服务器·正则表达式
Kusunoki_D2 天前
Python-正则表达式(re 模块)
python·正则表达式
数字芯片实验室2 天前
正则表达式的前世今生
正则表达式
Lenyiin3 天前
《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
c++·正则表达式·lenyiin
AA-代码批发V哥3 天前
Java正则表达式完全指南
java·正则表达式
coding随想4 天前
JavaScript中的正则表达式:文本处理的瑞士军刀
javascript·mysql·正则表达式
OldField-Tian4 天前
Qt中使用正则表达式来提取字符串
qt·正则表达式
datascome4 天前
简数采集技巧之快速获取特殊链接网址URL方法
前端·经验分享·爬虫·程序人生·正则表达式
WebCsDn_TDCode4 天前
正则表达式检测文件类型是否为视频或图片
javascript·正则表达式·音视频