grep awk sed(文本处理三剑客练习题+答案)
1.进入/lianxi目录,复制/etc/passwd到当前目录下,然后对passwd进行操作2、查找出当前passwd文件中以ftp或者mail开头的行,在屏幕上输出。3、查找出当前passwd文件中首行不是以r、m、f开头的行,在屏幕上输出。4、查找出当前passwd文件中以bash结尾的行。5、查找出/etc/login.defs文件中的有效行(不显示空行和注释行)。6、查找出/var/lo
练习-grep
1.进入/lianxi目录,复制/etc/passwd到当前目录下,然后对passwd进行操作
2、查找出当前passwd文件中以ftp或者mail开头的行,在屏幕上输出。
3、查找出当前passwd文件中首行不是以r、m、f开头的行,在屏幕上输出。
4、查找出当前passwd文件中以bash结尾的行。
5、查找出/etc/login.defs文件中的有效行(不显示空行和注释行)。
6、查找出/var/log/messages文档中有16个字母的单词?
7、查找出来/etc/passwd文件里用户名包含liu同时使用bash的用户
8、查找/etc/ssh/sshd_config 里的有效行
9、查找出/etc/ssh/sshd_config 文件里的包含连续2个数字的行
10、查找出包含特殊字符的行
11、查找出不包含数字的行
12、查找出/var/log/secure里的ip地址出来
13、写一个表示下面网址的正则表达式出来--》egrep -o "[a-Z]+://[0-Z]+\.[0-Z]+(\.[0-Z]+)+" url.txt
1#. 进入目录并复制文件
bash
cd /lianxi cp /etc/passwd ./
2. 查找以ftp或mail开头的行
bash
grep -E "^(ftp|mail)" passwd # 或者 egrep "^(ftp|mail)" passwd
3. 查找首行不是以r、m、f开头的行
bash
grep -vE "^(r|m|f)" passwd
4. 查找以bash结尾的行
bash
grep "bash$" passwd
5. 查找/etc/login.defs中的有效行
bash
grep -vE "^(#|$)" /etc/login.defs # 或者排除空行和注释行 grep -v "^#" /etc/login.defs | grep -v "^$"
6. 查找/var/log/messages中16个字母的单词
bash
grep -oE "\b[a-zA-Z]{16}\b" /var/log/messages
7. 查找用户名包含liu且使用bash的用户
bash
grep "liu" /etc/passwd | grep "bash$"
8. 查找/etc/ssh/sshd_config里的有效行
bash
grep -vE "^(#|$)" /etc/ssh/sshd_config
9. 查找包含连续2个数字的行
bash
grep -E "[0-9]{2}" /etc/ssh/sshd_config
10. 查找包含特殊字符的行
bash
grep -E '[[:punct:]]' passwd
# 或者指定某些特殊字符
grep -E '[!@#$%^&*()_+\-=\[\]{};:"|,.<>/?]' passwd
11. 查找不包含数字的行
bash
grep -v "[0-9]" passwd
12. 查找/var/log/secure里的IP地址
bash
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/secure
13. 网址正则表达式修正
原表达式有误,修正如下:
bash
egrep -o "[a-zA-Z]+://[a-zA-Z0-9]+\.[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+" url.txt
或者更完善的版本:
bash
egrep -o "https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[a-zA-Z0-9./?%&=_-]*)?" url.txt
练习--awk
1.获取cpu使用率最高的前5个进程的 pid %cpu command name ,按照降序排列
ps -eo pid,%cpu,command --sort=-%cpu|head
2.获取内存使用率最高的前5个进程的 pid %mem command name ,按照降序排列
ps -eo pid,%mem,command --sort=-%mem|head
3.只显示df -h结果的第一列文件系统
df -h | awk '{print $1}'
4.显示passwd文件的第5行和第10行的行号和用户名
awk -F: 'NR==5 || NR==10 {print NR,$1}' /etc/passwd
5.使用NF变量显示passwd文件倒数第二列的内容
awk -F: '{print $(NF-1)}' /etc/passwd
6.显示passwd文件中第5到第10行的用户名
awk -F: 'NR>=5 && NR<=10 {print $1}' /etc/passwd
7.显示passwd文件中第7列不是bash的用户名
awk -F: '$7 != "/bin/bash" {print $1}' /etc/passwd
8.显示passwd文件中行号是5结尾的行号和行
awk 'NR ~ /5$/ {print NR, $0}' /etc/passwd
9.用ip add只显示ip
ip add|tr -s " "|awk -F"[ /]" '/ens33$/{print $3}'
(不使用tr或者cut命令)
ip add|awk -F"[ /]" '/ens33$/{print $6}'
10.使用awk显示ens33的入站流量和出站流量(字节)
yum install net-tools -y
ifconfig
ifconfig|awk 'NR==5||NR==7{print $1,$5}'
11.使用awk命令统计以r开头的用户数目
awk -F: 'BEGIN{num=0} /^r/ {print $1; num++} END{print "以r开头的用户总数:" num}' /etc/passwd
练习--sed
1.复制/root/.bash_profile文件到当前目录下,然后修改里面的PATH变量,修改为
# 复制文件
cp /root/.bash_profile .
# 修改PATH变量(使用sed)
sed -i 's|^PATH=.*|PATH=/sanchuang/bin:$PATH|' .bash_profile
# 或者使用追加方式(如果原文件没有PATH定义)
echo 'PATH=/sanchuang/bin:$PATH' >> .bash_profile
2.sed修改SELINUX配置文件从开启(enforcing)变成禁用(disabled)
# 复制文件
cp /etc/sysconfig/selinux .
# 修改SELINUX状态
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' selinux
3.复制/etc/sysconfig/network-scripts/ifcfg-ens33到当前目录下,将当前下的ifcfg-ens33里的BOOTPROTO="dhcp" 修改为BOOTPROTO="none"
# 复制文件
cp /etc/sysconfig/network-scripts/ifcfg-ens33 .
# 修改BOOTPROTO
sed -i 's/BOOTPROTO="dhcp"/BOOTPROTO="none"/' ifcfg-ens33
# 添加网络配置
echo -e "IPADDR=192.168.34.1\nGATEWAY=192.168.34.254\nPREFIX=24\nDNS1=114.114.114.114" >> ifcfg-ens33
4.复制/etc/ssh/sshd_config到当前目录下,修改里面的端口号修改为8899
将#Port 22 配置修改为Port 8899 要求去掉前面的#号,将22修改为8899
# 复制文件
cp /etc/ssh/sshd_config .
# 修改端口配置(使用单条sed命令)
sed -i 's/^#Port 22/Port 8899/' sshd_config
# 或者分两步处理(更安全)
sed -i '/^#Port 22/ s/#Port 22/Port 8899/' sshd_config # 去掉注释并修改端口
sed -i '/^Port [0-9]\+/ s/Port [0-9]\+/Port 8899/' sshd_config # 修改已存在的Port行
更多推荐



所有评论(0)