处理文本的工具sed Stream EDitor, 行编辑器 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时 缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。 如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清 空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重 定向存储输出。 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 参考

1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符 2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的# 和空白字符 3、在/etc/fstab文件中不以#开头的行的行首增加#号 4、处理/etc/fstab路径,使用sed命令取出其目录名和基名 5、利用sed 取出ifconfig命令中本机的IPv4地址 6、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个 字段的重复次数 7、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和 sed两种方法分别实现) 8.将文本文件的n和n+1行合并为一行,n为奇数行 .

**1.cat /etc/grub2.cfg |sed -r 's/^[[:space:]]+//' **

2.cat /etc/fstab |sed -r 's/(^#[[:space:]]?)//' 3.cat /etc/fstab |sed -r 's/^([^#].*)/#\1/' 4.1取文件名:echo "/etc/fstab"| sed 's@[^/]\+$@@' 4.2取基名:echo "/etc/fstab"| sed 's@.*/\([^/]\+\)$@\1@' 5.ifconfig ens33|sed -n '2p'|sed 's/.*inet \(.*\) netmas.*/\1/'

此题方法很多,如下: ifconfig ens33| sed -r '2!d;s@(.*inet )(.*)( net.*)@\2@'

ifconfig ens33|sed -n '2p' |sed 's/.*inet //' |sed 's/ netmask.*//'

6.ls /misc/cd/Packages/ |grep "rpm$"|sed -r 's/.*\.(.*)\.rpm$/\1/'|sort |uniq -c ls /misc/cd/Packages/.rpm |rev |cut -d. -f2|rev |sort |uniq -c 7.1sed方法:cat /etc/init.d/functions | sed -r 's@[^[:alpha:]]+@\n@g'|sort |uniq -c|sort -n 7.2grep方法:cat /etc/init.d/functions | grep -o -E "<[[:alpha:]]+>"|sort|uniq -c |sort -n cat /etc/init.d/functions |grep -o '[[:alpha:]]'|sort |uniq -c|sort -n 7.3tr 方法:cat /etc/init.d/functions | tr -c '[:alpha:]' '\n' |sort|uniq -c|sort -n 此三种方法,大家可以看出,tr和sed的方法理念相一致,均采用补集的思想,将不是字母的字符全部转换为newline,然后再进行统计;而grep -o方法,将每一个单词进行分割,并进行单独分行,后续再进行统计。 三种方法,grep和tr/sed得到的答案不一样,肯定某种方法存在着漏洞。 这个问题目前我没想到解决的方法,希望大神指出 20180412 接引道人 给大佬递烟,递啤酒,递可乐。问题被解决,选出字母即可,'[[:alpha:]]+'可以达到同样的效果。 20180414 接引道人 8.seq 10 | sed 'N;s/\n/ /' seq 10 | xargs -n2