day29学习笔记)(4月13日)

sed和正则表达式

sed是什么

sed是 Stream Editor (字符流编辑器)的缩写,简称流编辑器。

sed是操作、过滤和转换文本内容的强大工具。

sed的功能

  • 常用功能包含正则表达式对文件实现快速增删改查
  • 其中查询的功能中最常用的两大共功能是
    • 过滤(过滤指定的字符串)
    • 取行(区出指定的行)

sed命令执行过程

文字描述

sed 处理 文件 chaoge.txt

1.判断第一行是否要处理,不是就重新读取下一行;是则继续处理,流水线向后走;
2.数据放到了模式空间(内存),执行sed命令,如a追加、i插入、s替换
3.将模式空间内加工过的数据,输出到终端上,然后清空模式空间的内容;
4.继续处理下一行文本,重复上述流程,直到文件读取结束;

sed语法格式

sed [选项] [sed内置命令字符] [输入文件]

说明:
1.注意 sed 软件及后面选项,sed 命令和输入文件,每个元素之间都至少有一个空格

2.为了避免混淆,文本称呼sed为sed软件.sed-commands(sed命令)是sed软件内置的一些命令选项,为了和前面的 options(选项)区分,故称为sed命令.

3.sed-commands 既可以是单个sed 命令,也可以是多个sed命令组合.

4.input-file(输入文件)是可选项,sed 还能够从标准输入或管道获取输入

sed软件的参数

options[选项]
解释说明
-n    取消默认的 sed 软件的输出,常与 sed 命令的 p 连用
-e    一行命令语句可以执行多条 sed 命令
-f    选项后面可以接 sed 脚本的文件名
-r    使用正则拓展表达式,默认情况 sed 只识别基本正则表达式
-i    直接修改文件内容,而不是输出终端,如果不使用-i 选项 sed 软件只是修改在 内存中的数据,并不影响磁盘上的文件

sed软件的命令

sed-commands[sed 命令]
解释说明
a 追加,在指定行后添加一行或多行文本
c 取代指定的行
d 删除指定的行
D 删除模式空间的部分内容,直到遇到换行符\n 结束操作,与多行模式相关
i 插入,在指定的行前添加一行或多行文本
h 把模式空间的内容复制到保持空间
H 把模式空间的内容追加到保持空间
g 把保持空间的内容复制到模式空间
G 把保持空间的内容追加到模式空间
x 交换模式空间和保持空间的内容
l 打印不可见的字符
n 清空模式空间,并读取下一行数据并追加到模式空间
N 不清空模式空间,并读取下一行数据并追加到模式空间
p 打印模式空间的内容,通常 p 会与选项-n 一起使用
P(大写) 打印模式空间的内容,直到遇到换行符\你结束操作
q 退出 sed
r 从指定文件读取数据
s 取代,s#old#new#g==>这里 g 是 s 命令的替代标志,注意和 g 命令区分
w 另存,把模式空间的内容保存到文件中
y 根据对应位置转换字符
:label  定义一个标签
t 如果前面的命令执行成功,那么就跳转到 t 指定的标签处,继续往下执行后 续命令,否则,仍然继续正常的执行流程

sed匹配文本范围

sed匹配文本范围

范围 解释
空地址 全文处理
单地址 指定文件某一行
/pattern/ 被模式匹配到的每一行
范围区间 10,20 十到二十行10,+5第10行向下5行/pattern1/,/pattern2/
步长 1~2,表示1、3、5、7、9行2~2两个步长,表示2、4、6、8、10、偶数行

echo 追加多行数据

echo -e 参数
-e 允许对下面列出的加反斜线转义的字符进行解释.
\\
反斜线
\a
报警符(BEL)
\b
退格符
\c
禁止尾随的换行符
\f
换页符
\n
换行符
\r
回车符
\t
水平制表符
\v
纵向制表符

sed命令语法(记忆)

sed软件提供的命令很强大,刚开始到不用全部记住,以后逐步记忆即可,记住最常用的。

sed命令语法 作用
3 操作第三行
3,6 操作3~6行,包括3和6行
3,+5 操作3到3+5(8)行,包括3,8行
1~2 步长为2,操作1,3,5,7..行
3,$ 对3到末尾行操作,包括3行
/yuchao/ 对匹配字符yuchao的喊该操作
/yuchao/,/chaoge/ 对匹配字符yuchao到chaoge的行操作
/yuchao/,$ 对匹配字符yuchao到结尾的行操作
/yuchao/,+2 '/yuchao/,+2p',打印匹配到yuchao的行,包括其后2行

sed增加数据

sed增加字符命令

"a":追加文本到指定行,记忆方法:a 的全拼是 apend,,意思是追加 
"i":插入文本到指定行前,记忆方法:i 的全拼是 insert,意思是插入

在文件第二行后添加数据
sed  '2a 插入的内容'  filename.txt

在第二行前,插入数据
sed   '2i 插入的内容'  filename.txt

sed '行号a 字符数据' 源文件

sed删除字符数据

d 删除指定的行
d 命令,表示删除字符,delete意思

sed默认是多行处理所有文本,如果不指定范围,sed默认是删除所有文本行数据

sed '行号 d命令' 文件

删除文件第2行
sed '2 d'   filename.txt

删除1到3行
sed '1,3d' filename.txt

删除第1、2、4行
sed '1d;2d;4d' filename.txt

删除指定字符的行
sed '/指定字符/d' filename.txt

使用正则删除
sed  '/a.*b/d'   filename.txt

删除第二行到指定字符的行
sed   '2,/指定字符/d'  filename.txt

删除第3行到尾行
sed    '3,$d'   filename.txt

删除偶数行(步长)
sed   '2~2d'   filename.txt

删除奇数行(步长)
sed '1~2d'  filename.txt

感叹号取反删除
sed '/yuchao/!d' chaoge.log
My name is yuchao.
My website is http://www.yuchaoit.cn
除了有字符yuchao的行,其他都删除

sed修改数据

c  把选定的行改为新的文本

把第二行替换成 I teach linux,python!
sed '2c I teach linux,python!' chaoge.log


sed替换的命令解释
语法:
sed 's/替换前字符/替换后字符/g' file
sed 's#替换前字符#替换后字符#g' file
sed 's@替换前字符@替换后字符@g' file

s 将每一行第一处匹配的字符替换 s/old_string/new_string/

g 全局替换global,每一行,每一处匹配的字符都替换  s/old_string/new_string/

-i 选项、参数,直接修改文件

sed默认是修改内存中的模式空间数据,不会修改源文件,使用-i会修改源文件,修改磁盘上的文件数据。


不加g只替换一次
sed 's#yuchao#老于#' chaoge.log

加上g,全局替换
sed 's#yuchao#老于#g' chaoge.log

指定行号修改
sed '3s#computer#电脑#g' chaoge.log

忽略大小写替换(i指令)
sed 's#my#his#gi' chaoge.log

分组替换
语法:
sed软件也提供了 \(\)分组功能
使用\1引用第一个括号的数据
\2引用第二个括号的数据
sed最多记住9个分组

sed与扩展正则
-r   使用sed -r参数才能支持扩展正则
-e   多次编辑,写入多次sed命令

以分组的方法提取ip地址
ifconfig ens33 | sed -rn '2s#.*inet (.*) netmask.*$#\1#pg'

以去头去尾的方法提取ip
ifconfig  ens33  |  sed -ne  '2s#^.*inet\s##'  -e '2s#netmask.*##p'


sed查询

sed打印命令p 打印sed正则处理后的数据
并且sed默认打印模式空间,可以用-n取消

固定用法,只要实用p,就是想输出指定数据,必然用-n取消默认打印

打印第二行
sed  '2p'  file  

打印第1到第4行
sed  '1,4p'  file

过滤字符串打印
sed '/qq/p'  file   #打印有qq的行

指定行到指定字符串区间
sed   '3,/http/p' -n  file   #如果没匹配到http字符,依然会向后打印

找出http或linux的行
sed   '/http|linux/p'  -n  file 

找出http到linux的行
sed  '/http/,/linux/p'  -n  file

w命令,将sed操作结果,写入到指定文件中
sed '/linux/w linux.log' chaoge.log -n

替换文件中所有的yuchao为老于,新内容写入到yu.log
sed 's#yuchao#老于#gw yu.log' chaoge.log -n



posted on 2022-04-14 21:41  Cloud~Commander  阅读(62)  评论(0编辑  收藏  举报