您的位置:首页 > 产品设计 > 产品经理

马哥教育第十一天、十二天学习总结

2018-02-04 18:44 429 查看
马哥M28第十一天、sed是一种流编辑器,它一次处理一行内容,处理时把当前处理的行存储在临时缓冲区中,它一次处理一行内容。处理时把当前处理的行存储在临时缓冲区中,称为"模式空间",接着使用sed命令处理缓冲区中的数据,处理完成后,把缓冲区的内容送往终端屏幕,然后读入下一行,执行下一个循环。如果没有使用诸如 “D”的特殊命令,那么会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出!
sed :必须注意,在搜索处理包含模式的行数据时,模式都是在//内的,即"pattern",通常模式最后都要指定选项,对结果执行一个解释行为,否则sed无法做出解释而报错:-e,expression;
$符在sed中作为文本最后一行的意思进行解释,在正则表达式中作为每行行尾进行解释!

nl filename == cat -n filename :显示查询内容的行号以及对应内容!

(小插曲:遇到的系统问题总结:CentOS7开机找不到网卡,网络配置文件被默认修改;原因是networkmanager是7的默认管理工具,默认接管ens33可覆盖配置文件,导致mac地址改变--> nmcli命令工具)

练习:1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符3、在centos6系统/root/install.log每一行行首增加#号4、在/etc/fstab文件中不以#开头的行的行首增加#号5、处理/etc/fstab路径,使用sed命令取出其目录名和基名6、利用sed 取出ifconfig命令中本机的IPv4地址7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)9、将文本文件的n和n+1行合并为一行,n为奇数行cat /etc/fstab |sed -r 's/^#[[:blank:]]+//g'3 cat /root/install.log |sed 's/^.*$/#&/g' 开头符就是^ 直接可以将开头符替换,所以结束符是$如何在表达式中出现,即所以视为全部替换,所以不加$45 echo '/etc/fstab' | sed 's@/.*\@@g'

7、ls -1 |sed -n -r "s/.*\.(.*)、.rpm/\1/gp" |sort |uniq -c |sort -nr8.cat /etc/init.d/functions |grep -o -w -E "\<[[:alnum:]]+\>" |sort |uniq -c |sort -nr

sed:[基本option + 高级编辑命令] sed -n '1p' passwd 只打印第一行 ifconfig eth1 |sed -n 2p seq 100 |sed -n '1~2p'步进,只显示奇数行
seq 100 |sed -n '2~2p'步cat 进,只显示偶数行
sed -i.orig 's/dog/cat/g' pets 备份源文件为*.orig文件后再替换保存
sed '2a\dog cat dog cat cat' pets 在第二行后增加新行
sed '2i\dog cat dog cat cat' pets 在第二行前增加新行
sed '2c\dog cat dog cat cat' pets 替换第二行
sed '2w /path/filename' pets 将第二行保存到执行文件
sed '2r /path/filename' pets 将指定文件读取并加到第二行后
sed '=' pets 在显示的结果前显示行号

P:打印模式空间开端至\n内容,并追加到默认输出之前h:把模式空间中的内容覆盖至保持空间中H:把模式空间中的内容追加至保持空间中g:从保持空间取出数据覆盖至模式空间G:从保持空间取出内容追加至模式空间x:把模式空间中的内容与保持空间中的内容进行互换** n:读取匹配到的行的下一行覆盖至模式空间 ** N:读取匹配到的行的下一行追加至模式空间d:删除模式空间中的行 注意:对于没有被sed后续命令处理过多的数据,sed都是会默认输出的!D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

例题1:将文本文件的n和n+1行合并为一行,n为奇数行 cat number.txt
123456 ]# sed 'N;s/\n/ /g' number.txt

例题2:使用含有模式的文件,将文件中的小写字母转换成大写,并将每一行的字母与数字交换位置文件 text 内容为:1a2b3c4d5e6f7g8h9i

脚本文件 patterncat patternhy/abcdefghi/ABCDEFGHI/s/([0-9])([A-Z])/\2\1/

]# sed -rf pattern text

马哥M28—第十二天、

实验:删除/lib64/libc.so.6文件并恢复 思路:利用rescue救援模式,虚拟机进入后马上ESC进入bios选项,选择rescue进行救援系统启动,将本地系统挂载到自创建的文件系统上; 最终,开启临时shell后将临时救援系统根下对应目录下的文件拷贝到本地系统对应位置,重启待系统重写标签后即可!!

练习:统计光盘中Packages当中的rpm包的各架构数量,从大到小排列 ls -1 |sed -r -n 's/.*\.(.*).rpm$/\1/p' |sort |uniq -c|sort -rn
ls *.rpm |rev |cut -d. -f2 |rev |sort -rn |uniq -c
rev:将内容倒着显示

rpm -i 安装
-v 显示过程
-vv 显示详细过程
-h 显示进度
-ivh 常用的安装选项组合
--nodeps 忽略依赖性关系检测
--replacepkgs 重复安装已经安装过的包,文件覆盖
--replacefiles 即将安装的包的部分文件与其他已安装的包文件冲突,可继续安装,文件不覆盖
--nosignature :不检查来源合法性
--nodigest: 不检查包完整性
--noscripts : 不执行程序包脚本
%pre :安装前脚本; --nopre
%post:安装后脚本; --nopost
%preun:卸载前脚本;--nopreun
%postun:卸载后脚本;--nopostun
-U 指定的包比已安装的包新或者未安装
-F 指定的包比已安装的包新
--oldpackage 指定的包比已安装过的包旧
***--force :通常像更新升级内核这一类重要操作时,只用--force,可以保留原版本,即多版本共存!
--replacepkgs, --replacefiles, --oldpackage
-q 查询已安装的所有包
-qa 查询已安装的所有包 -qf 文件路径,查询指定的文件来源于哪一个rpm包 -ql 包名 查询该包提供了哪些文件 -qp 包名 对未安装的包,指定rpm文件再配合其他查询子选项来进行各项查询操作 -q --changelog 包名 查看更新日志 -qc 包名 查看该软件包所提供的配置文件
-qd 包名 查看该软件包所提供的文档文件
-qi 包名 查看该软件包的详细信息
-q --scripts 查看安装前以及安装后的脚本 -q --provides 包名 查看一个软件包提供了哪些能力(功能) -q --whatprovides 能力名 查看一个能力由哪个包提供 -q --whatrequires 能力名 查看一个能力依赖于哪些包

-e 卸载 -e 包名
rpm -e vsftpd --allmatches 安装了多个版本的某个rpm可以一次性全部删除

rpm -e `rpm -q vsftpd` --nodeps 删除时不检查依赖性关系

-V 校验已安装的包的文件哪些发生了更改或丢失,更改变化的类型如下:
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P capabilities differ

-K rpm包 验证包的合法性
--import 公钥 导入公钥
rpm -qa "gpg-pubkey*" 查询公钥 rpm -e `rpm -qa "gpg-pubkey"` 删除公钥

--initdb 初始化/var/lib/rpm数据库
--rebuilddb 重建包头索引目录

rpm2cpio 将rpm包转换为cpio归档文件
实验:模拟删除/etc/init/rcS.conf文件并恢复
mout /dev/sr0(sr*指的是光盘光驱一类的设备) /mnt/cdrom/ 1.rm -f /etc/init/rcS.conf
2.rpm -qf /etc/init/rcS.conf
initscripts-9.03.58-1.el6.centos.x86_64
3.cp /mnt/cdrom/Packages/initscripts-9.03.58-1.el6.centos.x86_64 4.cd /app
5.rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64 |cpio -idv 6.cp etc/init/rcS.conf /etc/init

yum(解决rpm依赖性安装的有效策略机制) repolist [all/enabled/disabled]
clean all 清除缓存
makecache 建立缓存
yum-config-manager --add-repo=http://172.16.0.1/centos/6/ install 包名
remove 包名

作业:使用CentOS6 ftp部署一个可供CentOS6 CentOS7系统使用的yum网络仓库 核心步骤:
1.安装vsftpd
rpm -ivh vsftpd-2.2.2-24.el6.x86_64.rpm
2.启动vsftpd服务以及设置重启后自动启动
service vsftpd start
chkconfig vsftpd on
3.关闭selinux
vim /etc/selinux/config 设置SELINUX=disabled
reboot
4.关闭防火墙
iptables -F
service iptables save
5.创建ftp目录及拷贝rpm文件
cd /var/ftp/pub
mkdir 6 7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sed 高级编辑 rpm