Linux shell脚本:sed与awk的简单使用以及示例

一、简介

sed与awk是在shell脚本编程中功能十分强大的两个语句。sed主要用来对文本数据的行进行替换、删除、新增、选取等特定工作;而awk则是对文本数据根据一定的规律进行提取。

比如,

名称为file的文本中有七行数据

想要显示其中5~7行数据,则可以在终端中输入 "sed   -n '5, 7'p   (文件路径)/file" ,则显示为

5~7行的数据

在终端中输入date可显示当前日期

终端输入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

你可能感兴趣的:(Linux shell脚本:sed与awk的简单使用以及示例)