文本处理工具sed-2
例:
搜索/etc/passwd文件里的第一个root并替换成administrator
sed ‘s/root/administrator/’ /etc/passwd
如果要全局替换
sed ‘s/root/administrator/g’ /etc/passwd
sed -r ‘s/(root)/\1er/g’ /etc/passwd
表示把文件里的root全部替换成rooter
在所有行的末尾加上magedu
sed -r ‘s/(.*)/magedu\1/’ /etc/passwd
sed -r ‘s@(bin/bash)$@s\1@’ /etc/passwd
在quiet后面加 xyz
sed -r ‘s/(^GRUB_CMDLINE.*)”$/\1 xyz”/’ /etc/default/grub
或者
sed -r ‘/GRUB_CMDLINE_LINUX/s/(.*)”$/\1 xyz”/’ /etc/default/grub
或者
sed -r ‘/GRUB_CMDLINE_LINUX/s/”$/ xyz”/’ /etc/default/grub
重要:想替换什么都可以想截取什么都可以!
用sed取出ifconfig ens33中的ip地址
原理就是用sed的功能定义ip地址为\1再替换原行为\1
ifconfig ens33 | sed -n ‘2p’ | sed -r ‘s/.inet (.) netmask.*/\1/’
或者
ifconfig ens33 | sed -r ‘2!d;s/(.inet )(.)( net.*)/\2/’ (分成三段)
或者
ifconfig ens33 |sed -n ‘2p’|sed -r ‘s/.inet//’ |sed ‘s/ netmask.//’ (切头再切尾)
或写成
ifconfig ens33 |sed -n ‘2p’|sed -e ‘s/.inet//’ -e ‘s/ netmask.//’
把指定行的行首#去掉
只在一行里去掉
sed ‘/^#NameVirtualHost/s/#//’ /etc/httpd/conf/httpd.conf
在某一段中去掉
sed ‘/#<VirtualHost/,/#<\/VirtualHost>/s/^#//g’ /etc/httpd/conf/httpd.conf
注意:这里第二段有/所以必须转义加\
有指定行也有某一段行同时去掉
sed -e ‘/^#NameVirtualHost/s/#//’ -e ‘/#<VirtualHost/,/#<\/VirtualHost>/s/^#//g’ /etc/httpd/conf/httpd.conf
取基名
echo “/etc/sysconfig/network” | sed -r ‘s@./(.)$@\1@’
完美版,防止network/这种情况
echo “/etc/sysconfig/network” | sed -r ‘s@^(.*/)(^/+)(/?$)$@\2@’
取dirname
echo “/etc/sysconfig/network/” | sed -r ‘s/(.*\/)(^/+\/?$)\1/’
练习
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为奇数行
答案
1.sed ‘s/^ *//’ /etc/grub2.cfg /
如果要删除tab开头就sed ‘s/^ \t*//’ /etc/grub2.cfg
2.sed -r ‘s/^# +//’ /etc/fstab
3.sed -r ‘s/^(.*)/#\1/’ /root/install.log
4.sed -r ‘s/^(^#.*)/#\1/’ /etc/fstab
5.
目录名:
echo “/etc/fstab” | sed -r ‘s@^/(.*)/(^/+/?)$@\1@’
基名:
echo “/etc/fstab” | sed -r ‘s@^/(.*)/(^/+/?)$@\2@’
6.ifconfig | sed -n ‘2p’ | sed -r ‘s/(.addr:)(.)( Bcast.*)/\2/’
7.ls -1 /media/CentOS_6.9_Final/Packages/ | sed -r ‘s/^(.*)(.)..rpm$/\2/’ | sort | uniq -c
查看文件个数
ls -1 /media/CentOS_6.9_Final/Packages/ |wc -l
8.
cat /etc/init.d/functions | tr -s ” ” ” ” | tr -s ‘\t’ ” ” | sed -r “s/^ //”|sed ‘/^$/d’| tr ” ” “\n” |sort |uniq -c
9.
sed ‘N;s/\n/\t/’
学员评价