awkgrepsedlinux操作文本的三大利器,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

以下所有实验输出,均以测试文件test.log内容为基准:

20170102 admin,password Open
20170801 nmask,nmask close
20180902 nm4k,test filter

awk

AWK是一种处理文本文件的语言,是一个强大的文本分析工具; awk是以列为划分计数的,$0表示所有列,$1表示第一列,$2表示第二列。

awk参数

  • -F 指定输入文件折分隔符,如-F:
  • -v 赋值一个用户定义变量,如-va=1
  • -f 从脚本文件中读取awk命令

注:只列举最常用的参数

分隔符

每行按空格分割列,并输出第1、3列

$ awk '{print $1,$3}' test.log
# 或者
$ cat test.log | awk '{print $1,$3}'

自定义分隔符

使用”,”进行分割,参数用-F

awk -F, '{print $1,$2}' test.log

使用多个分隔符,先使用空格分割,然后对分割结果再使用”,”分割

$ awk -F '[ ,]'  '{print $1,$2,$3}'  test.log  #注意逗号前面有一个空格

设置变量

设置awk自定义变量,用参数-v

例子:设置变量a为1

cat test.log | awk -v a=1 '{print $1,$1+a}'

注意:-v a之间要空格。

字符串拼接:(用””而不是+)

cat test.log | awk -v a=\" '{print a""$0""a}'

逻辑判断

输出第一列为20170801的记录

cat test.log | awk '$1==20170801 {print}'

输出第二列不是nmask,nmask的记录

cat test.log | awk '$2!="nmask,nmask" {print}'

内建变量

NR参数:输出行号

cat test.log | awk '{print NR,$1,$2,$3}'

正则表达式

输出第二列中包含nm开头的所有记录

cat test.log | awk '$2 ~ /nm.*/ {print}'

输出包含2017开头的记录

cat test.log | awk '/2017.*/ {print}'

注意:这里没有~,因为没有指定是哪一列

忽略大小写{INGORECASE=1}

cat test.log | awk '{INGORECASE=1} /nmask/ {print}'

匹配取反 !~

cat test.log | awk '$2 !~ /nmask/ {print}'

内置函数

substr字符串截取

截取第一列的第一到第四个字符

cat test.log | awk '{print substr($1,1,4)}'

split切分字符串

以逗号分隔第2列的数据,并输出分别输出第2列的内容

cat test.log | awk '{split($2,a,",");print a[1],a[2]}'

gsub替换

将第2列中的nmask替换成nMask

cat test.log | awk '{gsub("nmask","nMask",$2);print}'

grep

Linux grep命令用于查找文件里符合条件的字符串。

Usage

递归查询

grep -r nmask /etc/  #查看/etc目录下内容包含nmask的文件

查询取反

grep -v test test.log

sed

Linux sed命令是利用script来处理文本文件。

参数

  • -e 以选项中指定的script来处理输入的文本文件。
  • -f 以选项中指定的script文件来处理输入的文本文件。
  • -h 显示帮助。
  • -n 仅显示script处理后的结果。
  • -V 显示版本信息。

动作

  • a :新增, a 的后面可以接字串,而这些字串会在下一行出现
  • i :插入, i 的后面可以接字串,而这些字串会在上一行出现
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  • d :删除
  • s :取代,通常这个s的动作可以搭配正规表示法!如 s/old/new/g

插入操作

在test.log文件的第3行后插入一行,内容为nmask

sed -e 3a\nmask test.log

删除操作

删除test.log的第2行、第3行数据

cat test.log | sed '2,3d'

匹配删除,删除行中有nmask字符串的

nl test.log | sed '/nmask/d'

替换操作

sed 's/要被取代的字串/新的字串/g'

awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一的更多相关文章

  1. awk grep sed cut学习

    awk学习网站 grep sed cut

  2. awk,grep,sed文本格式化处理

    一.awk取列 [root@web01 ~]# cat /etc/passwd|awk -F ':' '{print $1"\t\t"$7}' ###-F指定分隔符 root /b ...

  3. 打印第二列为oldboy的第一列内容(awk,grep,sed用法)

    [root@goldtest ~]# cat ip.log 10.0.0.1 oldboy 10.0.0.2 oldgirl 10.0.0.4 tingting 10.0.0.4 oldboy old ...

  4. awk grep sed 的一些问题

    条件   匹配    打印含关键字的行 ps aux  | sort -k 4 -r | awk '$4 ~ /^[0-9]/ && $4>0 {print $4,$11}' z ...

  5. Linux三剑客:grep、awk、sed

    ---------------------------------------------------------------------------------------------------- ...

  6. Linux高级文本处理命令

    cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...

  7. Linux文本文件——文本编辑器Vim

    Linux文本文件——文本编辑器Vim 摘要:本文主要学习在Linux系统中使用Vim文本编辑器编辑文本. 什么是Vim Vim是一个基于文本界面的编辑工具,使用简单且功能强大.更重要的是,Vim是所 ...

  8. linux学习笔记:第二单元 UNIX和Linux操作系统概述

    第二单元 UNIX和Linux操作系统概述 UNIX是什么 UNIX操作系统的特点 UNIX 与Linux的关系 GNU项目与自由软件 GUN计划 自由软件意味着什么 Linux简介 Linux是什么 ...

  9. Linux 操作系统文件略解

    1.使用tree命令查看根目录的树结构 # tree -L 1 如果没有tree命令,可以使用yum进行安装 # yum -y install tree 执行命令后,即可看到根下一共有19个目录 . ...

随机推荐

  1. HBase之CF持久化系列(续1)

    这一节本来打算讲解HRegion的初始化过程中一些比较复杂的流程.不过,考虑前面的博文做的铺垫并不够,因此,在这一节,我还是特意来介绍HBase的CF持久化.关于这个话题的整体流程性分析在博文< ...

  2. Kafka对Java程序员有多重要?连阿里都再用它处理亿万级数据统计

    一.了解淘宝Kafka架构 在ActiveMQ.RabbitMQ.RocketMQ.Kafka消息中间件之间,我们为什么要选择Kafka?下面详细介绍一下,2012年9月份我在支付宝做余额宝研发,20 ...

  3. 解决SpringMVC中文乱码问题--这是前端传参数到服务器

    SpringMvc参数传递中乱码问题   问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面 ...

  4. 【转】ret,retf,iret的区别

    ret RET, and its exact synonym RETN, pop IP or EIP from the stack and transfer control to the new ad ...

  5. IView组件化之部署及按钮学习

    IView是什么? iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品. Npm安装IView npm install iview 在main.js中配置I ...

  6. Qt窗口定制

    qt中的QWidget窗口支持窗体绘制,但是不支持窗口标题栏绘制,想要美观的界面,还需要自己去定制,下面我就介绍一种定制窗体的方法 一个窗口无非就3部分,标题栏.窗体和状态栏,接下来我定制的窗口没有状 ...

  7. asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件

    一.概述 在使用Web API时,对于开发人员来说,了解其各种方法可能是一项挑战.在ASP.NET Core上,Web api 辅助工具介绍二个中间件,包括:Swashbuckle和NSwag .NE ...

  8. 推荐几个Spring Cloud学习资料

    研究Spring Cloud也有一段时间了,手头上有一点收集的资料,分享给小伙伴们学习. 博客 1.跟我学Spring Cloud 2.周立|Spring Cloud 3.Spring Cloud基础 ...

  9. Spring Boot 2.x(七):优雅的处理异常

    前言 异常的处理在我们的日常开发中是一个绕不过去的坎,在Spring Boot 项目中如何优雅的去处理异常,正是我们这一节课需要研究的方向. 异常的分类 在一个Spring Boot项目中,我们可以把 ...

  10. windows powershell一些操作