1、grep命令
grep命令是一个Linux文本处理工具,它与egrep命令属于同一系列grep -E与egrep作用相同,这些命令都是用于对文件和文本执行重复搜索任务的工具。我们可以通过grep命令指定特定搜索条件来搜索文件及其内容以获取有用的信息。grep是全局搜索正则表达式并打印出匹配的行,其抓取数据是贪婪模式,即不会漏掉过滤内容,但准确性会相对降低。
格式:
grep 匹配条件 处理文件名称
grep root passwd ##过滤root关键字所在的行
grep -i root passwd ##忽略大小写过滤root关键字所在的行
grep -E "\<root" passwd ##过滤root字符之前没有字符的行
grep -E "root\>" passwd ##过滤root字符之后没有字符的行
grep -数字 ##显示过滤行以及上面几行和下面几行
grep -n ##显示匹配的行所在行号
grep -A数字 ##显示过滤行以及下面几行
grep -B数字 ##显示过滤行以及上面几行
grep -v ##反向过滤
grep命令字符数量匹配规则:
^westos 以westos关键字开头
westos$ 以westos结尾
w…s w开头s结尾中间含有3个任意字符
…s s结尾前面有3个任意字符
* 字符出现次数任意(即0次到任意次)
? 字符出现0到1次
+ 字符出现1次到任意次
{n} 字符出现n次
{m,n} 字符出现m到n次
{,n} 字符出现0到n次
{m,} 字符最少出现m次
实验:
1、切换到一个空目录/mnt中,新建并编辑文件westos如下
2、使用grep命令分别过滤westos文件中,以w开头s结尾中间含有1 、2、3 任意个任意字符的关键字所在的行( * 表示任意字符 . 的个数任意)
3、使用grep -E命令过滤westos文件中,以w开头s结尾中间含有4个 / 含有3个 / 最少含有3个 / 含有1到3个任意字符的关键字所在的行
练习:
编写脚本显示系统中能被su命令切换的用户名称
sed字符替换:
1、切换到一个空目录/mnt中,复制/etc/passwd文件到该目录中,避免文件内容过长删除一部分内容,文件中的内容是以:分隔的,我们可以使用vim编辑passwd文件进行字符替换,也可以使用sed进行字符替换,字符替换时要用 ‘ ’ 将替换策略引起来
2、使用sed命令将passwd文件中每一行每一列中的:替换为###
3、=表示给文件中的每一行前加行号,但是默认加在每一行的前一行,如果想要将行号加在每一行前,我们需要通过管道将行号后的换行符\n替换为空(N表示提前加载sed处理行的下一行)
练习:
假设selinux为关闭状态,编写脚本Apache_port.sh修改http端口号,默认端口号80
3、awk
1、awk简介
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
2、awk命令格式
awk -F 分隔符 BEGIN{}{}END{} FILENAME:这里FILENAME指的是文件名称本身
表达式 #含义
westos #westos变量值
“westos” #westos字符串
/条件1|条件2/ #条件1或者条件2
/条件1/||/条件2/ #条件1或者条件2
/条件1/&&/条件2/ #条件1且条件2
$0 #所有的列
$1 #第一列
$2 #第二列
$3 #第三列
实验:
1、使用awk命令,首先输出显示westos,接着-F指定以:为分隔符截取显示passwd文件的第一列,最后输出显示end
截取策略中的字符串需要用“ ”引起来,否则awk命令会将其当作变量处理(即不会输出显示指定字符串本身)
此时截取到的便是westos到end的内容
2、使用awk命令统计passwd文件行数:给变量N赋初值为0,awk每读取一行文件内容变量N就进行一次自加操作,最后输出变量N的值即为passwd文件的行数
3、使用awk命令-F指定以:为分隔符截取显示passwd文件的第一列
4、使用awk命令以:为分隔符截取第七列以bash结尾的行的第一列($7~表示指定第七列);使用awk命令以:为分隔符截取第七列不以bash结尾的行的第一列
练习:
1、命令练习:统计在系统中能su切换的且用户家目录不在/home下的用户数量
2、命令练习:使用awk命令抓取网卡ip
ifconfig ens3 | awk -F "[ ]+" '/inet /{print $3}'
&&
ifconfig ens3 | awk '/\<inet\>/{print $2}'