awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一
awk
、grep
、sed
是linux
操作文本的三大利器,也是必须掌握的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命令之一的更多相关文章
- awk grep sed cut学习
awk学习网站 grep sed cut
- awk,grep,sed文本格式化处理
一.awk取列 [root@web01 ~]# cat /etc/passwd|awk -F ':' '{print $1"\t\t"$7}' ###-F指定分隔符 root /b ...
- 打印第二列为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 ...
- awk grep sed 的一些问题
条件 匹配 打印含关键字的行 ps aux | sort -k 4 -r | awk '$4 ~ /^[0-9]/ && $4>0 {print $4,$11}' z ...
- Linux三剑客:grep、awk、sed
---------------------------------------------------------------------------------------------------- ...
- Linux高级文本处理命令
cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...
- Linux文本文件——文本编辑器Vim
Linux文本文件——文本编辑器Vim 摘要:本文主要学习在Linux系统中使用Vim文本编辑器编辑文本. 什么是Vim Vim是一个基于文本界面的编辑工具,使用简单且功能强大.更重要的是,Vim是所 ...
- linux学习笔记:第二单元 UNIX和Linux操作系统概述
第二单元 UNIX和Linux操作系统概述 UNIX是什么 UNIX操作系统的特点 UNIX 与Linux的关系 GNU项目与自由软件 GUN计划 自由软件意味着什么 Linux简介 Linux是什么 ...
- Linux 操作系统文件略解
1.使用tree命令查看根目录的树结构 # tree -L 1 如果没有tree命令,可以使用yum进行安装 # yum -y install tree 执行命令后,即可看到根下一共有19个目录 . ...
随机推荐
- IOS开发之尺寸
在移动端或者前端开发中,UI图通常是带标注的,指定某个控件的长宽等属性,一般UI给的是68px,72px这样的样式,但是我们在开发过程中通常又并不是完全按照上面的标注去设置值,有时候需要将这个标注除以 ...
- Thrift 代码分析
Thrift的基本结束 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过IDL(Interface Definiti ...
- Java代码复用的三种常用方式:继承、组合和代理
复用代码是Java众多引人注目的功能之一.这句话很通顺,没什么问题,但问题在于很多人并不清楚“复用”是什么.就好像我说“沉默王二是一个不止会写代码的程序员”,唉,沉默王二是谁? 我们需要来给“复用”下 ...
- 在阿里云 ECS 搭建 nginx https nodejs 环境 (一、 nginx)
首先介绍下相关环境.软件的版本 1.阿里云 ECS . ubuntu-14.04.5 LTS 2.nginx 版本 1.9.2 可能会遇到的问题: 一.在 ssh 服务器上的时候,提示 这个时候需要将 ...
- 菜鸟系列docker——docker基本概念(1)
docker基本概念 1.准备 这里先介绍容器技术,后续再介绍docker.docker是容器的一种,除docker以外,还存在coreos.不过在当前趋势下容器和docker基本上可以划为等号了. ...
- Magicodes.WeiChat——V3.0(多租户)版本发布
主要内容如下: 添加项目Magicodes.WeiChat.Data.Multitenant,全面支持多租户(基于EF已经ASP.NET Identity) 增加租户管理.租户成员管理.修改密码.公众 ...
- AppBoxFuture(三): 分而治之
系统数据量达到一定程度后必将采用分库分表的方式来提高系统性能,但传统的分库分表方式也必将带来更高的开发复杂程度.新一代的NewSql及NoSql数据库由于天生的分布式存储基因,既保证了能够横向扩展 ...
- 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(6)- 打包发布(PyInstaller3.3.1)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之打包发布. 经过上一篇软件优化之后,Jays-PyCOM已经初长成,该到了出去历练的时候了,只有经 ...
- Shell编程(week4_day2)--技术流ken
本节内容 1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 1 ...
- MySQL 笔记整理(9) --普通索引和唯一索引,应该怎么选择?
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 9) --普通索引和唯一索引,应该怎么选择? 假如你在维护一个市民系统, ...