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. SSM框架报HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException错

    如下图 一番排查之后发现原来是server层写漏注释了 粗心大意,一天内出现两次写漏注释,SSM框架有意思.

  2. JavaScript03-基本概念一

    js包括:语法.语句.类型.关键字.保留字.操作符和对象. 语法.关键字.保留字 1.js中一切区分大小写,包括变量.函数名.操作符: 2.标识符规则,第一个字符必须是字母.下划线_.或者美元符号,其 ...

  3. 【Docker】(4)搭建私有镜像仓库

    [Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...

  4. SpringCloud(9)---mysql实现配置中心

    mysql实现配置中心 本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程.有关项目源码后期会补上github地址 微服务要实现集中管理微服务配 ...

  5. TDX指标的理解与改造(价格到达指标线提醒)

    目的:画线指标理解,并同时改造成条件选股指标. 参考:https://mp.csdn.net/postedit/83176406 #ff7700 hex color  https://www.colo ...

  6. 『ice 离散化广搜』

    ice(USACO) Description Bessie 在一个冰封的湖面上游泳,湖面可以表示为二维的平面,坐标范围是-1,000,000,000..1,000,000,000. 湖面上的N(1 & ...

  7. Python爬虫入门教程 24-100 微医挂号网医生数据抓取

    1. 写在前面 今天要抓取的一个网站叫做微医网站,地址为 https://www.guahao.com ,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做 ...

  8. SpringBoot入门教程(十三)CORS方式实现跨域

    什么是跨域?浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域 . 跨域资源访问是经常会遇到的场景,当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资 ...

  9. rabbitmq.config配置参数详解

    rabbitmq.config详细配置参数 详细使用方法请点击:http://www.cnblogs.com/wyt007/p/9073316.html Key Documentation tcp_l ...

  10. 【c#】RabbitMQ学习文档(五)Topic(主题。通配符模式)

    (本实例都是使用的Net的客户端,使用C#编写),说明,中文方括号[]表示名词. 在上一个教程中,我们改进了我们的日志记录系统. 没有使用只能够进行虚拟广播的[Fanout]交换机,而是使用了[Dir ...