linux文本处理常用命令
linux文本处理常用命令
linux文本处理命令:grep、sed、printf、awk
1.grep
grep的作用是按行查找字符,输出包含字符的行。
#从文件查询
grep 'hello' filename.txt
#从管道的输入查询
cat filename.txt|grep 'hello'
grep使用示例:
grep的查找主要就是基于基本正则表达式的匹配,下面只是简单的给一些常用例子供参考。
grep 't[ae]st' //查找tast或test
grep '[0-9]' //查找数字
grep '[^a-z]oo' //查找Xoo,其中X是一个非a到z的字符
grep '^the' //查找以the开头的字符,这里注意区分^出现在[]里时代表“非某字符”,如上个例子,出现在[]外时代表"以某字符开头",如这个例子。
grep '^$' //查找空行
grep 'o\{2\}' //查找两个o,这里需要注意,{}在shell里有特殊意义,因此需要转义,这里与一般的正则使用不同,需要注意。
egrep:
我们知道正则表达式分为基本正则表达式和扩展正则表达式,但是grep只支持基本正则表达式,如果要是用扩展正则表达式,需要使用egrep命令。
几个例子:
egrep 'gd|good' //查找gd或good
egrep 'g(la|oo)d' //查找glad或good
egrep 'A(xyz)+C' //查找AXC,其中X是一个或一个以上的'xyz'字符串。
2.sed
sed是一个很强大的命令,可以用来做行删除、行新增、行选取、行替换和字符串的替换这5种操作。
sed是一个管道命令,可以处理管道输入。
2.1行删除
nl /etc/passwd | sed '2d' //删除第2行
下面将省略输入管道
sed '2,5d' //删除第2~5行
sed '3,$d' //删除第3到最后一行,$代表最后一行
sed '/^$/d' //删除空行
2.2行新增
sed '2a drink tea' //在第二行下面追加一行"drink tea",a代表append
sed '2i drink tea' //在第二行上面插入一行"drink tea",i代表insert
sed '2a a\
b\
c' //在第二行下面追加三行 "a"、"b"、"c",只需要每行结尾加"\"即可。
2.3行选取
sed -n '5,7p' //选取第5到7行输出,必须加-n参数,不然效果就是所有行都被输出,而5到7行输出两次。
2.4行替换
sed '2,5c No 2~5 lines' //将第2到5行替换为一行字符串"No 2~5 lines"
2.5字符串替换
sed 's/要被替换的字符串/新的字符串/g' //固定的格式,开头是s结尾是g,中间三个/分隔开要被替换的字符串和新的字符串,注意这里要被替换的字符串可以是正则表达式。
sed -i 's/hello/halo/g' filename.txt
将操作结果直接写入文件
默认用sed对文件做修改之后,只是输出修改后的文件,可以用>写入到新的文件。但是如果想修改原始文件,千万不能>到原始文件,这样执行的结果就是原文件直接被清空了。想要修改原始文件可以用 -i 参数,如:
sed -i '2d' file.txt //直接将原文件中的第二行删除。
直接修改原文件是很危险的,一旦修改错误无法还原。可以先不加 -i 参数执行命令把修改结果打印出来,确认无误后再加上 -i 参数。
#sed -i "s/oldstring/goalstring/g" file (要替换的字符串可以用正则表达式)
#example1 replace the /apps to /appvol at the file test.txt
sed -i "s/\/apps/\/appvol/g" test.txt
#example2 replace the "apps" to "appvol"
sed -i "s/\"apps\"/\"appvol\"/g" test.txt
#example3 replace the "/apps" tp "/appvol"
sed -i "s/\"\/apps/\"\/appvol/g" test.txt
#example4 replace the "\apps" tp "\appvol"
sed -e "s#\"\\apps#\"\\appvol#g" test.txt
3.printf
printf这个命令用语言不太好描述,但是一动手就明白了。
把下面的内容保存为printf.txt:
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
先cat看一下,是下面这个效果:

现在用printf指令加一些参数来看一下,执行
printf '%10s %10s %10s %10s %10s \n' `cat printf.txt`
输出结果:

是不是比cat输出的结果漂亮多了。
%10s代表这一列的宽度固定为10个字符。更多的格式就不介绍了,这篇文章我们掌握一个%10s就够了。
printf不是管道命令,要想用它处理文件必须像上面的命令那样使用`cat printf.txt`把文件内容给提出来。
printf的使用相当广泛,后面的awk命令中也会应用到printf命令。
4.awk
awk命令主要是将文件通过分隔符拆成列来处理,还能通过条件判断对不同的行进行不同的处理,甚至还可以进行数值计算~
我们也是通过例子来学习。
我们先用last命令看一下最后登录的5个用户信息:

图中的第一列是用户名,第三列是用户ip,现在我们想摘出这两列,用awk就可以做到:
last -5|awk '{print $1 "\t" $3}'
输出:

命令看起来挺复杂,不要着急,其实很简单。
首先awk使用时有固定的格式:awk '{命令}',单引号和大括号就是固定的格式而已。
然后上面的命令就是
print $1 "\t" $3 //awk默认会用空格和tab将每行分隔为N列,$1代表第一列,$3代表第三列。
这样一看是不是简单多了。
刚刚的last命令产生的数据默认就是用tab分隔的,现在我们看另一个例子,执行 cat /etc/passwd:

这次产生的数据每行是用 : 分隔的,那么想使用awk输出第一列和第三列就需要执行分隔符:
cat /etc/passwd|awk -F ':' '{print $1 "\t" $3}' // -F ':' 代表指定使用 : 作为分隔符
执行结果:

除了$1,$3这样的特殊符号,
awk的命令中还可以使用下面的特殊符号:
NF :每一行分隔后的列数
NR :行号
下面用一个综合的例子来说明awk的条件判断和数值计算,有这样一组数据保存为pay.txt:
Name 1st 2nd 3rd
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000
现在想加一列"Total",计算每一行的数值总和。
用awk可以完成这个需求:
cat pay.txt |awk 'NR==1 {printf "%10s %10s %10s %10s %10s \n",$1,$2,$3,$4,"Total"};NR>1 {printf "%10s %10s %10s %10s %10s \n",$1,$2,$3,$4,$2+$3+$4}'
运行结果:

这里有几个要点:
- 加入条件判断后,awk的格式为: awk '条件1 {命令1};条件2{命令2}'
- 条件判断有以下逻辑运算:
- >
- <
- >=
- <=
- == //注意判断相等要用两个等号
- !=
- 可以直接运算行内列的值($1、$2、$3)。
linux文本处理常用命令的更多相关文章
- [文件]Linux文本处理常用命令总结
转自:https://www.cnblogs.com/sheeva/p/6406285.html 引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepa ...
- linux vi编辑常用命令
linux vi编辑常用命令 来源:互联网 作者:佚名 时间:07-10 21:31:14 [大 中 小] linux vi编辑常用命令,需要的朋友可以参考下 vi编辑器中有三种状态模式 1. ...
- linux:终端常用命令 + vi命令修改文件及保存 方法
首先介绍一下Ubuntu下各个目录的一般作用: / 这就是根目录,一台电脑有且只有一个根目录,所有的文件都是从这里开始的.举个例子:当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录 ...
- Linux学习之CentOS(二)--初识linux的一些常用命令
Linux学习之CentOS(二)--初识linux的一些常用命令 在VM上安装完了CentOS6.4以后,看着linux系统成功跑起来,心里小激动了一把......但是前方学习的道路还很遥远... ...
- Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。
Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们. 这个是我将鸟哥书上的进行了一下整理的,希望不要涉及到版权问题. 1.显示日期的 ...
- Linux查看系统配置常用命令
Linux查看系统配置常用命令: 系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo ...
- Linux 系统巡检常用命令
Linux系统巡检常用命令 # uname -a # 查看内核/操作系统# cat /etc/centos-release # 查看centos操作系统版本# cat /proc/cpuinfo ...
- linux 下 mysql 常用命令
linux 下 mysql 常用命令 阅读目录 ====================== 1.开启和关闭 1.1.开启 1.2.关闭 1.3.重启 2.登录 2.1.密码明文 2.2.密码密文 ...
- Apache RocketMQ在linux上的常用命令
Apache RocketMQ在linux上的常用命令 进入maven安装后的rocketmq的bin目录 1.启动Name Server 2.启动Broker 3.关闭Name Server 4 ...
随机推荐
- 牛课第二次多校I
链接:https://www.nowcoder.com/acm/contest/140/I来源:牛客网 题目描述 White Cloud has a square of n*n from (1,1) ...
- Spark性能优化:shuffle调优
调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO.序列化.网络数据传输等操作.因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行 ...
- jmeter XML格式的结果中各属性的含义
最近在搞jmeter,生成xml的测试报告,对报告字段进行解释,可能是自己不会找,网上资源不多,好不容易找到的,记录下来: 感谢博主:http://blog.163.com/zhang_jing/bl ...
- TCP报文格式,TCP的三次握手和四次挥手&hosts文件
1.TCP报文格式 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接 序号(4字节=32位): 37 59 56 75 用来标识TCP发端向TCP收端发送的数据 ...
- js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型
一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...
- leetcode 【 Subsets 】python 实现
题目: Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset mus ...
- 转载: CRichEditCtrl使用大全
richedit 常见使用问题 一.常见问题 a.可以编译,不能执行的 在需要在相应的对话框中加上InitInstance(void)函数中添加 AfxInitRichEdit(); b.升级默认的R ...
- Spring 简单而强大的事务管理功能
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- SVD简化数据
一,引言 我们知道,在实际生活中,采集到的数据大部分信息都是无用的噪声和冗余信息,那么,我们如何才能剔除掉这些噪声和无用的信息,只保留包含绝大部分重要信息的数据特征呢? 除了上次降到的PCA方法,本次 ...
- 【转】unity Animator 怎么判断一个动画播放结束
关于unity Animator 怎么判断一个动画播放结束这里有几种方法.希望对大家有帮助.还有其他办法的可以分享一下 第一种方法:在动画结束帧后面加个动画事件,调用下含这个变量的函数接口不是可以了? ...