课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
2分钟

文本处理工具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/’