Linux文本三剑客之sed编辑器(永远温柔永远清醒)(二)

简介: Linux文本三剑客之sed编辑器(永远温柔永远清醒)(二)

2.3 sed-增加air

命令

含义

a

append追加,向指定的每一行追加内容(行后面)>>

i

insert插入,向指定的每一行插入内容(行前面)

r

在行后增加文件内容

[root@localhost data]# cat users.txt 
1,zhangsan
2,lisi
3,wangwu
4,zhaoliu
5,qianqi
6,zhuba
[root@localhost data]# sed '1a zhangsan996' users.txt 
1,zhangsan
zhangsan996
2,lisi
3,wangwu
4,zhaoliu
5,qianqi
6,zhuba
[root@localhost data]# sed '1i zhangsan996' users.txt 
zhangsan996
1,zhangsan
2,lisi
3,wangwu
4,zhaoliu
5,qianqi
6,zhuba
[root@localhost data]# sed '1r ip.txt' users.txt 
1,zhangsan
192.168.109.1
192.168.109.2
192.168.109.3
192.168.109.4
192.168.109.5
2,lisi
3,wangwu
4,zhaoliu
5,qianqi
6,zhuba


 


企业案例:向文件中追加多行内容

向config里面追加
UseDNS no
GSSAPIAUTCATION no
PermitRootLogin no
#方法一
[root@localhost data]# touch config
[root@localhost data]# cat >>config<<'EOF'
> UseDNS no
> GSSAPIAUTCATION no
> PermitRootLogin no
> EOF
#方法二
[root@localhost data]# sed -i '$a UseDNS no\nGSSAPIAUTCATION no\nPermitRootLogin no' config


2.4 sed-替换scy

替换格式

s###g

s///g

sAAAg

替换标记

含义

数字

表明新字符串将替换第几处匹配的地方

g

表明新字符串将会替换所有匹配的地方

p

打印与替换命令匹配的行,与-n一起使用

w文件

将替换的结果写到文件中

s

字符串替换

c

整行替换

y

字符转换,转换前后的字符长度必须相同

分隔符不唯一,只有三个相同就行;

前两个分隔符之间支持正则;

不加g则是替换每一行第一个被匹配到的内容,g是全局的意思;

替换操作类似vim的末行模式;

#每一行的数字替换为空
[root@localhost data]# sed 's/[0-9]//g' users.txt 
,zhangsan
,lisi
,wangwu
,zhaoliu
,qianqi
,zhuba
#root替换为admin
[root@localhost data]# sed -n 's/root/admin/p' passwd 
admin:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin
[root@localhost data]# sed -n 's/root/admin/2p' passwd 
root:x:0:0:admin:/root:/bin/bash
#删除前面的所有0
[root@localhost data]# echo 000000001010|sed 's/^0*//'
1010
#给1-10行加上注释
[root@localhost data]# sed '1,10 s/^/#/' passwd 
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
#mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin
......
#将所有root开头的行注释
[root@localhost data]# sed -n 's/^root/#root/p' passwd 
#root:x:0:0:root:/root:/bin/bash
[root@localhost data]# sed -n '/^root/ s/^/#/p' passwd 
#root:x:0:0:root:/root:/bin/bash
#注释fstab文件中的swap行
[root@localhost data]# sed -n '/swap/ s/^/#/p' /etc/fstab 
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost data]# sed -n 's/.*swap.*/#&/p' /etc/fstab 
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost data]#







脚本

#使用脚本执行sed命令
[root@localhost data]# vim script.sed
1,10 s/^/#/
#1-10行注释
/root/ s/$/#/
#包括root的行后面加上井号


如同只用了多次-e操作


保存至文件

#保存替换的内容到新的文件中
[root@localhost data]# sed -n 's/root/admin/gp' passwd >out1.txt
[root@localhost data]# cat out1.txt 
admin:x:0:0:admin:/admin:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin
[root@localhost data]# sed -n 's/root/admin/w out2.txt' passwd 
[root@localhost data]# cat out2.txt 
admin:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin
[root@localhost data]#


思考

sed 's9\945\9\99\98\939g' 1.txt      #这行命令是谁替换谁
9\945\9\99\98\939
#前面说过,分隔符是三个一样的字符就可以,可以看出分隔符是9而\是转义字符
#去掉三个没有转义的9就是下面的样子
94599  9893
#所以是94599替换成9893

后向使用,反向使用(先保护再使用)

#要实现这两种内容的转变
[root@localhost data]# echo 123456
123456
[root@localhost data]# echo '<123456>'
<123456>
#前后交换
[root@localhost data]# echo old_new |sed -r 's#(^.*)_(.*$)#\2_\1#g'
new_old



(old)_(new)


        \1_\2


c/y

[root@localhost data]# sed '1c zhangsan996' users.txt 
zhangsan996
2,lisi
3,wangwu
4,zhaoliu
5,qianqi
6,zhuba
#使用y转换
[root@localhost data]# sed 'y/zhangsan/zzzzzzzz/' users.txt 
1,zzzzzzzz
2,lizi
3,wzzzwu
4,zzzoliu
5,qizzqi
6,zzubz
[root@localhost data]# sed 'y/zhangsan/zzzzzzz/' users.txt 
sed:-e 表达式 #1,字符 19:“y”命令的字符串长度不同
[root@localhost data]# 
#使用tr替换
[root@localhost data]# cat users.txt |tr 'zhangsan' 'zzzzzzzz'
1,zzzzzzzz
2,lizi
3,wzzzwu
4,zzzoliu
5,qizzqi
6,zzubz
[root@localhost data]# cat users.txt |tr 'zhangsan' 'zzzz'
1,zzzzzzzz
2,lizi
3,wzzzwu
4,zzzoliu
5,qizzqi
6,zzubz




2.5 sed-剪切H-粘贴G

#将1-3行剪切并粘贴到最后
[root@localhost data]# sed '1,3 {H;d};$G' users.txt 
4,zhaoliu
5,qianqi
6,zhuba
1,zhangsan
2,lisi
3,wangwu


总结


sed执行多条命令的方式:


sed -n -e '命令1' -e  '命令2'  文件
sed -n -e '命令1;命令2' 文件
sed -n '
命令1
命令2
......
' 文件

sed对指定行操作:


以数字形式表示行区间

用字符串来过滤行

s/OLD/NEW/2  代表对每行第二个匹配到的字符串进行替换


                    g  代表对每行所有能匹配到的字符进行替换


                    p   可以结合-n 选项只打印替换的行内容


                    w   可以把替换的行内容保存到指定的文件中


n,m s/OLD/NEW/


/字符串+正则/ s/OLD/NEW


s/^/添加的字符/ 行首添加内容


s/$/添加的字符/ 行尾添加内容


sed -f 文件 可以在文件中定义多条操作规则


sed替换命令的字符串分隔符,就看s后面跟的字符,3个分隔符要保持一致,如果遇到跟分隔符相同的字符则需要使用\来转义


sed -i 可以直接修改文件内容,操作前建议先验证命令和备份目标文件


增删改查


删d


改s(字符串替换) c(整行替换) y(对应字符串替换,效率类似tr)


查p


增 a(在行后)i(在行前)r(在行后读入文件内容)


复制粘贴 H;G

目录
相关文章
|
1月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
97 1
Linux系统之部署轻量级Markdown文本编辑器
|
3月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
20天前
|
Linux 开发工具
linux文本管理命令
本文档介绍了Linux系统中常用的文本处理命令,包括`echo`、`cat`、`head`、`tail`、`wc`、`less`、`grep`以及重定向符号的使用方法和练习题。此外,还详细讲解了VIM编辑器的特点、工作模式、常用快捷键和高级技巧,帮助用户高效地进行文本编辑和处理。
34 4
|
2月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
186 9
Linux文本处理三剑客之sed详解
|
2月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
2月前
|
Linux Shell
10-10|linux命令查询 关键字在文本中出现的行数
10-10|linux命令查询 关键字在文本中出现的行数
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
537 2
|
3月前
|
Linux
Linux 系列之 在一个文本中查找指定的数据
文章介绍了在Linux命令行中使用文本搜索功能快速查找指定内容的方法,并提供了按`n`键查找下一个匹配项的技巧。
Linux 系列之 在一个文本中查找指定的数据
|
2月前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令
|
3月前
|
搜索推荐 Linux 网络安全
Linux系统中的Vim编辑器
【8月更文挑战第21天】Vim是一款功能强大的文本编辑器,在Linux系统中广泛使用。它具有三种基本模式:命令模式,用于执行操作但不能编辑文本;插入模式,允许用户像常规编辑器那样输入文本;底线命令模式,用于保存、退出及查找替换等操作。Vim还支持多窗口编辑、宏录制及插件扩展等功能,并可通过配置文件个性化设置。因其高效性、良好的可移植性和远程编辑能力,Vim特别适用于开发者和系统管理员。
下一篇
无影云桌面