Linux之sed与awk

sed介绍

什么是sed?

Sed是一个流处理编辑器,它能帮助我们自动处理文件、分析日志文件、修改配置文件等。

Stream Editor文本流编辑,sed是一一个“非交互式的"面向字符流的编辑器。能同时处理多个文件多行的内容

    可以不对原文件改动,把整个文件输出到屏幕
    可以把匹配到的内容输出到屏幕上
    还可以对原文件改动,但是不会再屏幕上返回结果

sed处理流程

sed参数说明

sed [-hnV][-e<script>] [-f<script文件>] [文本文件]

    -e<script>或--expression= <script>以选项中指定的script来处理输入的文本文件。
    -f<script文件> 或--file= <script文件>以选项中指定的script文件来处理输入的文本文件。
    -h或--help显示帮助。
    -n或--quiet或--silent仅显示script处理后的结果。
    -V或--version显示版本信息。

sed动作可以理解为操作

a:新增,a的后面可以接字串,新增字符串会在目前的下一行

c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行


d:删除,因为是删除,所以d通常写在最后
  

i:插入,i的后面可以接字串,新增字串会在目前的上一行

p:打印,将某个选择的数据显示出。通常p会与参数sed -n一起运行

s:替换,可以直接进行替换。通常这个s的动作可以搭配正则表示。例如1,20s/old/new/g (是不是和vim的替换很像? )

示例文件如图

cat sed.test

查找行,在文件中查找包含789的行

cat sed.test | sed -n '/789/p'

在文件中添加第三行,内容为hello world

sed -e '2a hello world' sed.test

 删除行,删除2到3行

 cat -n sed.test | sed -e '2,3d'

删除包含789的行

cat sed.test | sed '/789/d'

 替换行,将1-2行替换为hahaha

cat -n sed.test | sed '1,2c hahaha'

 查找并替换字符串,将示例文本中的Hello换成haha

 sed修改文件

  • 前面的一系列操作,只是在屏幕上按要求输出了内容,而文件本身并没有改变。
  • sed也可以用于文件自身的修改。但这样操作非常危险,有可能误操作将文件改坏,所以我们要在有充足把握的情况下才能这样使用。
  • 结合-i和查找替换即可修改文件,上例中加-i即可。
sed -i 's\Hello\haha\g' sed.test

awk的使用

什么是awk?

awk是一种编程语言,用于在linux/unix 下对文本和数据进行处理。它支持用户自定义函数和动态正则表达式等功能,是linux/unix 下的一一个强大编程工具。

awk命名来自于三位创始人Alfred Aho, Peter Weinberger,和Brian Kernighan的Family Name的首字符。

awk的处理方式

awk一次处理一行内容

awk对每行可以切片处理,空格和制表符为默认分隔符将每行切片,切开的部分再进行各种分析处理

awk格式

命令格式:

awk [选项参数] 'script' var=value file(s)

        script组成:pattern {awk操作命令}

            pattern:正则表达式;逻辑判断式

   awk操作命令:内置函数:print() printf() getline..;

         控制指令:if(){...}else{...};while(){..};

Awk内嵌参数应用

内置变量1:

    $0:表示整个当前行
    $1:每行第一个字段
    ...

内置变量2:

    NR:每行的记录号,行号
    NF:字段数量变量,字段总数
    FILENAME:正在处理的文件名

awk示例

以:分割,显示/etc/passwd的第一列,即用户名列

 cat /etc/passwd | awk -F : '{print $1}'

显示/etc/passwd的第1列和第4列,用逗号分隔显示,所有行开始前添加列名start1, start4;最后一行添加,end1,end4

cat /etc/passwd | awk -F ':' 'BEGIN {print "start1,start4"} {print $1 "," $4} END {print "end1,end4"}'

匹配某段字符

 cat /etc/passwd | awk -F : '$1 ~ /oo/'

 显示/etc/passwd的前五行,显示每行的行号、列数,以及该行完整的内容

head -n5 /etc/passwd | awk -F : '{print NR " " NF " " $0}'

 条件操作匹配

cat /etc/passwd | awk -F : '$3 == "0"'

 这里操作符号可以用==、>、>=、<、<=、!= 都是可行

和数字比较时,将数字要用双引号""引起来,表示字符串,不加引导则表示数字

cat /etc/passwd | awk -F : '$3<="1000"'

累加前四行用户的uid

head -n4 /etc/passwd | awk -F : '{(sum=sum+$3)};END{print sum}'

流程控制类

输出第一个字段的第一个字符大于q的行

cat /etc/passwd | awk -F ':' '{if($1 > "q"){print $1}else{print "_"}}'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sedawk是用户、程序员和管理员应用的工具。之所以称为sed是因为它是一个流编辑器(stream editor),用于对许多文件执行一系列的编辑操作。awk是根据它的开发者Aho、Weinberger和Kernighan命名的。awk是一种编程语言,它可以使你很容易地处理结构化数据和生成格式化报告。第二版介绍了awk的POSIX标准,同时介绍了一些可免费使用的以及商业版的awk。 本书在一开始就给出了一个概述和指南,论述了从grep到sed再到awk不断改进的功能。sedawk具有相同的命令行语法,以脚本的形式接收用户的命令。因为所有这三个程序都使用UNIX正则表达式,因此书中用一章的篇幅来介绍UNIX的正则表达式语法。 然后,本书介绍如何编写sed脚本。从编写几行简单的脚本开始,学习进行手工编辑操作的其他基本命令和高级命令,以及由此引入的简单程序结构。这些高级命令包括用于处理保持空间、即一个临时缓冲区的命令。 本书的第二部分经过广泛的修订,包括了POSIX awk,以及3个可免费使用的和3个商业版的awk。本书介绍了awk语言的主要特点以及如何编写简单的脚本。你还能了解到: * 通用的程序结构 * 如何使用awk的内部函数 * 如何编写用户的定义函数 * awk程序的调试技术 * 如何开发一个处理索引的应用程序,该程序演示了awk的强大功能 * 得到不同awk版本的FTP和联系信息 本书还包含了一组用户提供的程序,这些程序展示了广泛的sedawk程序风格和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值