2018.4.26 六周第二次课 (正则sed 替换)

sed工具介绍(替换、及替换指定的字符)

sed介绍:sed工具主要是替换的文本输出到屏幕上,而且还有其他更丰富的功能。
sed命令格式:sed -n ‘n‘ p filename,单引号内的n是一个数字,表示几行。
-n选项的作用就是只显示我们要打印的行,无关紧要的内容不显示。

创建一个sed目录,把passwd文件拷贝进来,方便后面学习。

[[email protected] ~]# mkdir sed #创建一个目录
[[email protected] ~]# cd sed/ #进入到目录sed
[[email protected] sed]# cp /etc/passwd test.txt
 #拷贝passwd文件到本目录下,并且修改名字
[[email protected] sed]# ls #查看当前目录下都有哪些文件
test.txt
[[email protected] sed]# pwd #当前所在的位置
/root/sed

只显示我们需要查找的内容显示出来,示例如下:-n

[[email protected] sed]# sed -n ‘/root/‘p test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#-n选项是指显示我们要打印的行。

在grep中使用的特殊字符如(^ $ *等) 都可以在sed中使用。

指定一个区间打印, 比如指定一个区域2-3行,示例如下:-n

[[email protected] sed]# sed -n ‘2,3‘p test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

sed命令加上-e选项可以实现多个行为,示例如下:-e

[[email protected] sed]# sed -e ‘1‘p -e ‘/bus/‘p -n test.txt
root:x:0:0:root:/root:/bin/bash
dbus:x:81:81:System message bus:/:/sbin/nologin
#sed -e 实现多个行为,如我查找第一行,并且 把文档中含有bus的显示出来

如果需求说查找一个文件,把bus不管大小写都列出来,I

[[email protected] sed]# sed -n ‘/bus/‘Ip test.txt  #这里一定要加一个大I字母。
dbus:x:81:81:System message bus:/:/sbin/nologin
BUS

删除某些行(并非删除),把剩下的行数都显示出来,示例如下:d

[[email protected] sed]# sed ‘1,18‘d test.txt
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
BUS
#这里后面跟选项d,会把1到18行的内容删除,把后面的内容显示出来。

这里参数d表示删除的东西,它不仅可以删除指定的单行以及多行,而且可以删除匹配某个字符的行,还可以删除从某一行开始到文档最后一行的所有行,这个命令仅仅是在屏幕上并不显示这些行。

sed真正删除选中的行数,示例如下:-i

首先先拷贝一份文件过来:
[[email protected] sed]# cp test.txt test.txt.bak #拷贝过来个备份
[[email protected] sed]# ls #查看当前目录下的文件
test.txt  test.txt.bak
[[email protected] sed]# wc -l test.txt #wc查看一个文件有多少行
20 test.txt
[[email protected] sed]# sed -i ‘1,18‘d test.txt #-i删除1到18行。
[[email protected] sed]# wc -l test.txt #再来看这个文件有多少行。
2 test.txt

-i还可以指定删除某个字符的行,示例如下://

[[email protected] sed]# sed ‘/root/‘d  test.txt
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
BUS

全局指定替换1,10行。 s

[[email protected] sed]# sed ‘1,10s/root/toor/g‘ test.txt
#1,10是范围,后面跟s是替换,/root/替换成/toor/,g表示全局替换。
toor:x:0:0:toor:/toor:/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

上述中的参数s就表示替换的动作,参数g表示本行全局替换,如果不加g只会替换本行出现的第一个。

调整两个字符串的位置,示例如下: -r

第一段和最后一段替换位置

[[email protected] sed]# head test.txt | sed -r ‘s/([^:]+):(.*):([^:]+)/\3:\2:1/‘
/bin/bash:x:0:0:root:/root:1
/sbin/nologin:x:1:1:bin:/bin:1
/sbin/nologin:x:2:2:daemon:/sbin:1
/sbin/nologin:x:3:4:adm:/var/adm:1
/sbin/nologin:x:4:7:lp:/var/spool/lpd:1
/bin/sync:x:5:0:sync:/sbin:1
/sbin/shutdown:x:6:0:shutdown:/sbin:1
/sbin/halt:x:7:0:halt:/sbin:1
/sbin/nologin:x:8:12:mail:/var/spool/mail:1
/sbin/nologin:x:11:0:operator:/root:1

小括号在sed中属于特殊符号,必须在前面加转义字符\,替换时则携程类似\1、\2或\3的形式,上列中()把想要替换的字符打包成了一个整体,有这个转义字符\,-r选项让这个表达式更加清晰了。

查看一个文档当中,所有的数字不包含字符。

[[email protected] sed]# head test.txt |sed ‘s/[a-zA-Z]//g‘ #这里括号里的是范围
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://

如果给文档前面统一添加个字符串,比如aaa,示例如下:

[[email protected] sed]# head test.txt | sed -r ‘s/(.*)/aaa:&/‘ #&表示星号前所有
aaa:root:x:0:0:root:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/nologin
aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin
aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin
aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
aaa:sync:x:5:0:sync:/sbin:/bin/sync
aaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
aaa:halt:x:7:0:halt:/sbin:/sbin/halt
aaa:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
aaa:operator:x:11:0:operator:/root:/sbin/nologin

原文地址:http://blog.51cto.com/13646023/2107037

时间: 2024-10-12 11:55:46

2018.4.26 六周第二次课 (正则sed 替换)的相关文章

Linux20180427六周第二次课(4月26日)

六周第二次课(4月26日) 9.4/9.5 sed sed -n '/关键字/'p 文件名 支持 . * +(脱义),如果不想脱义的话,可以使用-r选项 其他的也都是可以匹配的,只是稍微麻烦. 如果想用sed打印指定的行 sed -n '2'p passwd 打印第二行 sed -n '2,5'p passwd 打印2-5行 sed -n '2,$'p passwd 打印第二行到最后一行 sed -n '1,$'p passwd 打印全部的行 -e表示可以同时执行多条匹配 sed -e '1'p

linux六周第二次课(3月13日)笔记

六周第二次课(3月13日)9.4sed(上)9.5sed (下) 9.4sed(上) 匹配到会连续打印两次 不想把无关的打印出来,加-N. 需要脱意符 不加脱意符,-n后面要加r 匹配两次O 打印出文件第2-5行的用法 打印出文件所有行的用法 打印出包含某个字符的行 9.5sed (下)set区分大小小的用 编辑文件 加入一行 半年的日志,删除前五个月,只留最后一个月.根据时间,用grep查行数.用vim打开文件,非常耗费内存,用set可以直接删掉. 删除带有user的行 替换功能 加上r才能生

2018.02.26 9周4次课

九周第四次课(2月26日) 11.1 LAMP架构介绍 11.2 MySQL.MariaDB介绍 11.3/11.4/11.5 MySQL安装 11.1 LAMP架构介绍 MySQL.MariaDB介绍 MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀) MySQL官网https://www.mysql.com  最新版本5.7GA/8.0DMR MySQL5.6变化比较大,5.7性

2018.3.26 14周1次课

十四周一次课(3月26日) 14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项 14.1 NFS介绍 NFS是Network File System的缩写 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本 NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写. NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C

2018.4.10 三周第二次课

磁盘挂载 mount (挂载点) 概念:mount命令可以查看当前系统已经挂载的所有分区.分区文件系统的类型.挂载点及一些选项等信息: 如果想知道某个已挂载分区的文件系统类型,直接用mount命令查看即可: 而未挂载的分区,可以使用blkid命令查看,后续会讲. 选项: 常用的有-a.-t.-o,在/etc/fstab下有讲解.可以man mount看一下 我们先把添加的硬盘格式化 mkfs.xfs -f /dev/sdb [[email protected] ~]# mkfs.xfs -f /

六周第二次课(1月16日)

9.4/9.5 sed sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. set -n "/root/&

2018.3.27 二周第二次课

1. 环境变量PATH 命令介绍:which 查找某个命令的绝对路径!$ 这个命令可以查看你最后一个命令的参数 (上一条命令最后一个参数)例:tree !$cp -r 如果目标目录存在的话,则会拷贝到目标目录下的目录里面,如果目标目录不在的话,则会创建目录放置那里.wc 可以查看一个文件的行数有多少, 语法:wc -l anaconda-ks.cfg.1 # -l后面跟要查看的文件相对路径或绝对路径 1.1 PATH环境变量 如何自定义环境变量 例:假设把ls命令换成ls2并且实现ls的功能,我

2018.4.3三周第二次课

usermod 设置扩展组 概念:更改用户属性的一个命令. 用法:usermod [选项] 后面跟你需要操作的内容 [用户名] 选项: -c, --comment 注释 GECOS 字段的新值 -d, --home HOME_DIR 用户的新主目录 -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态 -g, --gid GROUP 强制使用 GR

2018.4.19 五周第二次课

yum更换国内源 首先先恢复昨天的实验,把yum备份恢复回来 [[email protected] ~]# cd /etc/yum.repos.d #进入到目录[[email protected] yum.repos.d]# ls #查看当前文件dvd.repo[[email protected] yum.repos.d]# rm -f dvd.repo #rm 删除 dvd.repo文件[[email protected] yum.repos.d]# cp /etc/yum.repos.d.b