Linux 第八天: (08月09日) 练习和作业
将/etc/passwd 的内容列出并且列印行号 请将第 2~5 行删除
nl /etc/passwd | sed '2,5d'
仅列出/etc/passwd 文件内的第5-7 行
nl /etc/passwd | sed -n '5,7p'
多点编辑:一条sed命令 删除/etc/passwd第三行到末尾的数据 并把bash替换为sheller
nl /etc/passwd | sed -e '3,$d' -e 's/bash/sheller/'
1删除/etc/grub2.cfg所有以空白开头的行行首空白字符
sed 's#^[[:space:]]\+##' /etc/grub2.cfg
sed -r 's@^[[:space:]]+@@' /etc/grub2.cfg
2删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行当行首的#和空白字符
sed 's@^#[[:space:]]\+@@' /etc/fstab
3在 /root/install.log每行行首增加#号
sed -r 's@(.*)@#\1@g' /root/install.log
sed -n 's/^/#/p' /root/install.log
?在 /root/install.log第1-100行行首增加#号
sed -n '1,100p' /root/install.log |sed 's/^/#/'
4在/etc/fstab文件中不以#开头的行当行首增加#号
sed 's@^[^#]@#&@' /etc/fstab
5处理/etc/fstab路径,使用sed命令取出目录名和文件名
echo /etc/sysconfig/ |sed -r 's#[^/]+/?$##' 目录名
echo "/etc/fst/sd" | sed -r 's@(.*/)([^/]+/?)$@\1@'
echo "/etc/fst/sd" | sed -r 's@(.*/)([^/]+/?)$@\2@'
echo "/etc/fst/sd" | sed -r 's@(^.*/)(.*)/?$@\1@'
echo "/etc/fst/sd" | sed -r 's@(^.*/)(.*)/?$@\2@'
6利用sed取出ifconfig命令中本机ipv4地址
ifconfig|sed -n 2p |sed -r 's/.*addr:(.*) Bca.*/\1/'
ifconfig|sed -n 2p |sed -e 's/.*addr://' -e 's/ B.*//'
7统计centos安装光盘下package目录所有rpm文件以分隔倒数第二字段的重复次数
ls *.rpm |sed -r 's#.*\.(.*)\.rpm$#\1#'|sort |uniq -c
ls *.rpm |rev |cut -d. -f2 |rev|sort |uniq -c
1.把/etc/passwd 复制到/root/test.txt,用sed打印所有行;
1.cp /bin/cp /etc/passwd /root/test.txt ; sed -n '1,$'p test.txt
2. 打印test.txt的3到10行;
2. sed -n '3,10'p test.txt
3. 打印test.txt 中包含’root’的行;
3. sed -n '/root/'p test.txt
4. 在test.txt 20行到末行最前面加’aaa:’;
4. sed '20,$s/^.*$/aaa:&/' test.txt
5. 删除test.txt 的15行以及以后所有行;
5. sed '15,$'d test.txt
6. 删除test.txt中包含’bash’的行;
6. sed '/bash/'d test.txt
7. 替换test.txt 中’root’为’toor’;
7. sed 's/root/toor/g' test.txt
8. 替换test.txt中’/sbin/nologin’为’/bin/login’
8. sed 's#sbin/nologin#bin/login#g' test.txt
9. 删除test.txt中5到10行中所有的数字;
9. sed '5,10s/[0-9]//g' test.txt
10. 删除test.txt 中所有特殊字符(除了数字以及大小写字母);
10. sed 's/[^0-9a-zA-Z]//g' test.txt
11. 把test.txt 中第一个数字移动到行末尾;
11. sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*$\)#\1\3\2#' test.txt
12. 把test.txt中第一个单词和最后一个单词调换位置;
12. sed 's/\(^[a-zA-Z][a-zA-Z]*\)\([^a-zA-Z].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)/\4\2\3\1/' test.txt
13. 把test.txt中出现的第一个数字和最后一个单词替换位置;
13. sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)#\1\5\3\4\2#' test.txt
复制/etc/profile到/tmp/目录, 用查找替换命令删除/tmp/profile文件中的行首空白字符
sed -r 's@^[[:space:]]+@@g' /tmp/pfofile
复制/etc/rc.d/init.d/functions文件到tmp目录, 用查找替换命令为/tmp/funcitons的每行开头为空白字符的行当行首添加一个#号
%s@^[[:space:]]\+@#&@
如何设置tab缩进为4个字符?
set tabstop=4 临时设置:
vim /etc/vimr-->添加set tabstop=4 全局设置
vim ~/.vimrc 手动添加 set tabstop=4 当前用户
复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
cp /etc/rc.d/init.d/functions /tmp
%s@/etc/sysconfig/init@/var/log@g
sed 's@/etc/sysconfig/init@/var/log@g' /tmp/functions
删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
:%s@^#\([[:space:]]\+\)@\1@g
set -r 's@^#([[:space:]]+)@\1@' /tmp/functions
打印偶数行
sed -n 'n;p' FILE
倒序排列行 想到于tac
sed '1!G;h;$!d' FILE
保留后两行
sed '$!N;$!D' FILE
只保留最后一行
sed '$!d' FILE
加空行
sed ‘G’ FILE
显示10个空行
sed ‘g’ FILE
删除多余的空行,并在每行后加一个空行
sed ‘/^$/d;G’ FILE
sed 'n;d' qzx.txt
1
3
5
7
9
sed -n '1!G;h;$p' qzx.txt
10
9
8
7
6
4
5
3
2
1