一、简介
sed与awk是在shell脚本编程中功能十分强大的两个语句。sed主要用来对文本数据的行进行替换、删除、新增、选取等特定工作;而awk则是对文本数据根据一定的规律进行提取。
比如,
想要显示其中5~7行数据,则可以在终端中输入 "sed -n '5, 7'p (文件路径)/file" ,则显示为
在终端中输入date可显示当前日期
可以看到这个文本非常有规律,每一区段均以空格隔断,如果想要提取其中"星期日"这个信息,则可以通过awk来实现,具体为" date | awk '{print $4}' "。
二、sed & awk的命令简要介绍
sed -n '5, 7'p的含义:
-n:仅显示文本处理后的结果
5,7:第五到第七行
p(print):输出
date | awk '{print $4}'的含义:
date:显示当前日期
|:管道命令,作用为上一个命令的输出成为下一个命令的输入
print:输出
$4:
空格将文本分隔成不同的区段,第一段为$1,第二段为$2,以此类推。$4代表将“星期日”这一区段选中
三、例子
在/home/huser/download目录中建立一个名称为PackageList的文本,系统安装包下载到/home/huser/download目录中,一旦有新的安装包下载到该目录中,就在PackageList中添加一行记录该安装包ls命令的内容。
#!/bin/bash
#To create the list of the name of the packages in /home/user/download
flag=0
comparetext=`/usr/bin/awk '{print $9}' /home/user/download/PackageList | /usr/bin/cat`
number=`/usr/bin/ls -l /home/user/download | /usr/bin/nl | /usr/bin/tail -n 1 | /usr/bin/awk '{print $1}'`
while [ $number -gt 0 ]
do
text=`/usr/bin/ls -l /home/user/download | /usr/bin/sed -n ${number}p | /usr/bin/awk '{print $9}'`
for compare in $comparetext
do
if [ "$text" = "$compare" ]
then
flag=1
break
fi
done
if [ $flag = 1 ]
then
flag=0
elif [ $flag = 0 ]
then
/usr/bin/ls -l /home/user/download | /usr/bin/grep $text >> /home/user/download/PackageList
fi
count=`expr $count - 1`
done