SED是什么
-
grep,过滤关键字信息数据,主要是用于差文本内的数据
-
sed,对文本数据进行编辑,修改原文件内容
-
awk,对文件数据过滤,提取,并且能实现,格式化输出
工作原理
sed参数
-n | 取消默认的sed软件的输出,常与sed命令的p连用 |
---|---|
-e | 一行命令语句可以执行多条sed命令 |
-f | 选项后面可以接sed脚本的文件名 |
-r | 使用正则拓展表达式,默认情况sed只识别基本正则表达式 |
-i | 直接修改文件内容,而不是输出终端,如果不使用-i选项sed软件只是修改在内存中的数据,并不影响磁盘上的文件 |
sed增加数据
增,表示在指定行与行之间,添加新字符数据
sed增加字符命令
“a”:追加文本到指定行,记忆方法是 a的全拼是append,意思是追加
“i”:插入文本到指定行前,记忆方法是 i的全拼是insert,意思是插入
cat实现多行文本追加
[root@service ~]# cat >>my.log<<EOF
> ni
> sxx
> wyx
> EOF
[root@service ~]# cat my.log
ni
sxx
wyx
echo追加多行数据
1.多次追加
[root@service ~]# echo "你好" >> tt.log
2.使用换行符,一次添加多行数据
[root@service ~]# echo -e "hello\nworld\n你好\n" > hello.log
[root@service ~]# cat hello.log
hello
world
你好
sed添加多行数据
1.修改nginx配置文件,在第39行插入新数据 listen 81;
[root@service ~]# sed -i '39 i listen 81;' /etc/nginx/nginx.conf
2.给t1.log添加两行数据
[root@service ~]# sed -i '1 i 加油\n奥里给' t1.log
[root@service ~]# cat t1.log
加油
奥里给
i am student
sed删除字符数据
d :删除指定的行
d 命令,表示删除字符,delete意思
sed默认是多行处理所有文本,如果不指定范围,sed默认是删除所有文本行数据。
sed命令语法
3 | 操作第三行 |
---|---|
3,6 | 操作3~6行,包括3和6行 |
3,+5 | 操作3行以及后五行,八行 |
1~2 | 步长为2,操作1,3,5,7...行 |
3,$ | 对3到末尾进行操作,包括3行 |
/wyx/ | 对匹配的字符/wyx/进行操作 |
/wyx/,/sxx/ | 对匹配的字符/wyx/到/sxx/进行操作 |
/wyx/,$ | 对匹配字符/wyx/到结尾的行进行操作 |
/wyx/,+2 | 对匹配字符/wyx/的行以及后两行进行操作 |
1.删除第三行数据
sed '3 d' t1.log
2.删除第三行到第六行
sed '3,6 d' t1.log
3.删除奇数行
sed '1~2 d' t1.log
4.删除第三行开始,向下两行
sed '3,+2 d' t1.log
5.找到game那行且删除
sed '/game/ d' t1.log
6.删除game这一行到结尾
sed '/game/,$ d' t1.log
7.删除game哪一行以及后两行
sed '/game/,+2 d' t1.log
8.删除所有行
sed 'd' t1.log
9.删除1,2,4行
sed '1 d;2 d;4 d;' t1.log
10.删除以.结尾的行
sed '/\.$/d' t1.log
打印行范围练习
#sed提供打印的命令是p
打印game那一行,以及后两行
sed -n '/game/,+2 p' t1.log
sed修改数据
替换整行命令(c)
c///把选定的行改为新的文本
替换字符(s)
sed 's/替换前字符/替换后字符/g' file
g:global全局替换
-i:选项,参数,直接修改文件
sed默认是修改内存中的模式空间数据,不会修改源文件,使用-i会修改源文件,修改磁盘上的文件数据
sed分组替换
语法:
sed软件也提供了\(\)分组功能
使用\1引用第一个括号的数据
\2引用第二个括号的数据
sed最多记住9个分组
sed查询
sed打印命令p,打印sed正则处理后的数据
并且sed默认打印模式空间,可以用-n取消
固定用法,只要实用p,就是想输出指定数据,必然用-n取消默认打印
sed其他命令
w命令:
作用是将sed操作结果,写入到指定文件中
语法:
sed '/模式/w new_file' old_file
-e命令:
用于接上sed多个命令