# 本章练习
# 情景题 1
情景模拟题:通过 grep 搜索特殊字符串,并配合数据流重导向来处理大量的文件搜索问题
- 目标:正确使用正则表示法
- 前提:需要了解数据流重导向,以及通过子指令
${command}
来处理文件名的搜索
搜索 * 号来处理下面的任务
利用正则表示法找出系统中含有某些特殊关键词的文件
找出 /etc 下含有星号的文件与内容,
解决方法必须搭配通配符,但是星号本身就是正则表示法中特殊字符
# 需要记得 2> /dev/null 表示的是,标准输出错误 不显示在屏幕上 # 由于该条命令只能搜索文件内容,而不能对目录进行搜索,遇到目录会报错 [mrcode@study testpw]$ grep '\*' /etc/* 2> /dev/null
1
2
3上述指令只能寻找 /etc 层级下的文件,而不能让子目录下的文件也被搜索到
# 使用子命令找到 /etc/ 下包含子目录的所有文件 grep '\*' $(find /etc/ type f) 2> /dev/null # 可以使用 -l 只列符合条件的文件名 grep -l '\*' $(find /etc/ type f) 2> /dev/null
1
2
3
4
5如果文件数量太多,如找的是全系统 ( / )
[mrcode@study testpw]$ grep '\*' $(find / type f 2> /dev/null) -bash: /usr/bin/grep: 参数列表过长 # 指令内容长度是有限制的,可以通过管线命令以及 xargs 来处理 # 1. 先用 find 找出文件 # 2. 用 xargs 将这些文件每次只给 10 个给 grep 作为参数 # 3. grep 开始搜索文件内容 find / -type f 2> /dev/null | xargs -n 10 grep '\*'
1
2
3
4
5
6
7从输出的结果看,数据量很大,只需要知道文件名的话,同样可以使用 grep -l 参数
# 情景模拟 2
使用年限命令配合正则表示法建立新指令与新变量。想要建立一个新的指令名为:myip,这个指令能将我系统的 IP 找出来显示。新变量名为 MYIP,该变量可以记录我的 IP
处理格式很简单,可以这样试试看:
首先,使用 ifconfig、sed 与 awk 来取得我们的 IP
# 这里就是将 ip 前的文字和 ip 后的文字使用 sed 替换成空 # 注意这里的开头和结尾 .* 表示任意字符出现 0 次多次 [mrcode@study testpw]$ ifconfig enp0s3 | grep 'inet ' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g' 192.168.4.223
1
2
3
4将此命令使用 alias 指定为 myip
[mrcode@study testpw]$ alias myip="ifconfig enp0s3 | grep 'inet ' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'"
1最终,通过变量设置
[mrcode@study testpw]$ MYIP=$(myip) [mrcode@study testpw]$ echo ${MYIP} 192.168.4.223
1
2
3将别名永久生效,需要将 alias 与 MYIP 的设置写入你的
~/.bashrc
文件中
# 简答题
在 /etc 下,含有 XYZ 三个字符的任何一个字符的文件就列出来
grep -l [XYZ] /etc/* 2> /dev/null
1将 /etc/kdump.conf 内容取出后
1. 去除开头为 # 号的行 2. 去除空白行 3. 取出开头为英文字母的行 4. 统计总行数 [mrcode@study ~]$ grep -v '^#' /etc/kdump.conf | grep -v '^$' | wc -l 2
1
2
3
4
5
6
7
中文维基百科 ASCII:https://zh.wikipedia.org/w/index.php?title=ASCII
← 重点回顾 学习 Shell Scripts →