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