c++清空一个txt文本_Linux下常用文本处理命令大全

db4d4732afaa934617a6891ba88ca406.png

Linux中很多文本工具都使用到了正则表达式,正则表达式可以极大的简化linux系统管理工作,因为网上有很多正则相关的教程,所以这里不再讲述,我当时看的是菜鸟的正则表达式,看个一下午在实验几遍基本就会了,除了正向肯定预查,反向肯定预查这几个比较复杂一些,其他都是非常简单的,很多时候记不住也可以查询网上对着写,并不需要你实时记住。这里主要谈谈awk等用到正则表达式的文本处理工具。

一、awk

awk的指令必须包含在单引号中。

基本句式

awk -F'指定输入分隔符' 'BEGIN{做一些初始化工作} 一些过滤条件 {针对每行的工作}... END{最后收尾工作}'

中间的处理块可以有多个,通过过滤条件单每行都会走一遍过滤条件,其中BEGIN和END边只会执行一遍

过滤记录

  1. awk '$3==0 && $6=="LISTEN" ' netstat.txt
  2. awk '$3==0 && $6=="LISTEN" || NR==1 ' netstat.txt

指定分隔符

  1. awk -F: '{print $1,$3,$6}' /etc/passwd等价于awk 'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd
  2. awk -F '[;:]' 指定多个分隔符
  3. awk -F: '{print $1,$3,$6}' OFS="" /etc/passwd指定输出分隔符

需要注意的是上面print $1,$3,$6中的,被替换成了分隔符,如果是print $1$3$6则中间没有分隔符

特殊关键字:

  1. NR 目前处理的行号
  2. NF 当前处理的行一共用到的字段数目
  3. FNR 目前处理的文件的行号(当处理多个文件时,NR会不停的累加,但如果是FNR则在处理新文件是从1开始)
  4. FILENAME 文件名
  5. $0 当前整行
  6. FS 输入字段分隔符 默认是空格或Tab
  7. RS 输入记录分隔符 默认为换行符
  8. OFS 输出字段分隔符 默认是空格或Tab
  9. ORS 输出记录分隔符 默认为换行符

正则

  1. 普通匹配: awk'/hello/ {print}' test.sh
  2. 匹配取反: awk '!/hello/ {print}' test.sh
  3. 同时匹配: awk '/hello/ && /world/ {print}' test.sh
  4. 或者匹配: awk '/hello/ || /world/ {print}' test.sh 也可以写成awk '/hello|world/ {print}' test.sh
  5. 指定列匹配: awk '$5 ~ /hello/ {print}' test.sh
  6. 指定列匹配取反: awk '$5 !~ /hello/ {print}' test.sh

输出到不同的文件

  1. $ awk 'NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > "1.txt"; else if($6 ~ /LISTEN/) print > "2.txt"; else print > "3.txt" }' netstat.txt
  2. awk 'NR!=1{print > $6}' netstat.txt

其实使用了 >重定向,上例子使用了if语句

  1. 统计数据: awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}' netstat.txt
  2. 行数筛选,开头和结尾的条件使用,分隔: awk '/test1/,/test2/ {print}' test.txt

和环境变量的交互

$ x=5 $ y=10$ export y $ echo $x $y5 10$ awk -v val=$x '{print $1, $2, $3, $4+val, $5+ENVIRON["y"]}' OFS="" score.txtMarry   2143    78      89      87Jack    2321    66      83      55Tom     2122    48      82      81Mike    2537    87      102     105Bob     2415    40      62      72

二、grep

参数列表:

  1. -w 匹配整个单词
  2. -s 忽略文件不存在等报错
  3. -l 仅列出匹配文件列表
  4. -L 仅列出不匹配文件列表
  5. -A 显示后的行数 如-1 匹配行的后1行
  6. -B 显示前的行数 如-1 匹配行的前1行
  7. -number 显示前后的行数 如-1 匹配行的前后1行
  8. -n 打印行数
  9. -c 仅显示个数
  10. -v 反向
  11. -o 仅显示匹配的内容
  12. -E 则表示要使用EREs
  13. -P 则表示要使用PREs

grep主要就是一个正则表达式的使用,其中需要注意正则有三种BREs、EREs和PREs。前两种不支持非贪婪匹配。grep默认是BREs,所以他?,+,|,{,},(,)这种字符都需要用转义,另外他不支持s,S,D,d,等字符。

三、sed

sed命令在自动化脚本编写的过程还是经常用到的。

基本句式: sed -nfei [操作]

操作: n1,n2 动作

动作:

  1. d: 删除
  2. s: 替换,行内替换,行内匹配的字符串,如hello world该行替换hello为hi变成hi world
  3. a和i: a增加在匹配的后面增加行 i增加在匹配的前面增加行
  4. c :替换,针对整行替换

例子:

  1. sed -e 's/hello/hi/g':替换文本,-e可以省略
  2. sed -e '1,2s/hello/hi/g' -e '3,4s/world/man/g:等价于sed -e '1,2s/hello/hi/g;3,4s/world/man/g
  3. sed s/hello (world)/1 hi/g':群组匹配,可以使用选择前面的群组

四、sort和uniq

sort参数

  1. -r: 默认升序,-r表示反序
  2. -u: 移除重复
  3. -o: 重定向到文件,注意sort test.txt >test.txt不可用,因为> 是想清空文件,所以会导致文件在排序之前就清空了
  4. -n: 默认按字符排序,如10小于2,-n表示按数字排序
  5. -t: 指定分隔符
  6. -k: 指明用哪一列来做排序
  7. -b: 忽略每行前面开始出的空格字符

例子:

  1. sort -t $'' -k 1 -u res.txt > res2.txt 以tab作为分隔符,按第一列排序并去重

uniq参数

需要注意uniq需要文本是有序的,所以一般使用uniq的时候是用更早sort的管道后面

  1. -c:显示出现的次数
  2. -d:仅显示重复出现行;    
  3. -u :仅显示出一次的行列;   

说说sort|uniq 和sort -u,一直觉得很奇怪,两者有什么区别,功能是一样的。sort -u是后面加入的,所以很多人还是使用了sort|uniq,目前推荐使用sort -u,因为还少了进程间通讯。

五、实战

处理以下文件内容,将域名取出并进行计数排序,如处理:

http://www.baidu.com/index.htmlhttp: / / www.baidu.com/1.htmlhttp://post.baidu.com/index.htmlhttp://mp3.baidu.com/index.htmlhttp://www.baidu.com/3.htmlhttp://post.baidu.com/2.html得到如下结果:3 www.baidu.com2 post.baidu.com1 mp3.baidu.com

解法1:grep -Po '(?<=//)(.*?)(?=/)' test.txt |sort |uniq -c|sort -nr

1.利用了Perl,他支持非贪婪,2.利用了正向和反向预查(正向预查是后面的(?=)) 3.利用了-o参数只输出匹配的内容

解法2:awk -F/ '{print $3}' test.txt |sort |uniq -c|sort -nr

指明了分割符号 直接取对应值

解法3:sed 's/http://([^/]*).*/1/' test.txt|sort |uniq -c|sort -nr

基本的正则中小括号需要转义,如果采用-r参数即扩展的正则小括号不用转义

解法4: sed -e 's/http:' -e 's//.*//' | sort | uniq -c | sort -rn

采用了替换,先替换前面的,在替换后面的

awk例子

需要注意awk不支持多维数组,采用了一种变通的方式,普通的使用没问题,但是如果需要存的值是一个map就不合适了,如下文件 1-6列分别为deal od sum up lj day ,现在要计算sum up lj day 的累加和输出输出也要是deal od sum up lj day也就是sum up lj day需要是一个map,不过awk做不到这点

{    updealids:{        od: {day,sum,up,lj}            }}awk 'BEGIN{OFS=""}{result[$1,$3,"sum"]+=$4;result[$1,$3,"up"]+=$5;result[$1,$3,"lj"]+=$6;result[$1,$3,"day"]=$2}END{for ( i in result)   {split(i, a, SUBSEP); print result[i] ,a[1], a[2], a[3] }}'  *

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

labuladong 的算法小抄_来自GitHub 68.8k star的硬核算法教程

很多朋友害怕算法&#xff0c;其实大可不必&#xff0c;算法题无非就那几个套路&#xff0c;一旦掌握&#xff0c;就会觉得算法实在是太朴实无华且枯燥了&#xff01;本文选自硬核算法教程《labuladong的算法小抄》&#xff0c;带你学习套路&#xff0c;把握各类算法问题的共性…

router vue 动态改变url_2020年 vue常见面试问题总结(干货)!

1.什么是mvvm模式&#xff0c;谈谈你的理解&#xff1f; MVVM - Model View ViewModel&#xff0c;数据&#xff0c;视图&#xff0c;视图模型view 可以通过 事件绑定 的方式影响 model&#xff0c;model 可以通过 数据绑定 的形式影响到view&#xff0c;viewModel是把 model 和…

html怎么弄艺术字体,如何为图片加上艺术字的图文方法步骤

给图片加字有好多方法&#xff0c;比如用photoshop等专业工具&#xff0c;在线图片加字&#xff0c;但是前者效果好&#xff0c;操作较复杂&#xff0c;后者效果不大理想。其实有更简单相对效果也不错的方法&#xff0c;利用你手边的工具就可以了&#xff01;下面介绍利用Windo…

androidstudio调用系统相机为什么resultcode一直返回0_函数递归调用?看这文就够了...

作者 | Cooper Song责编 | Elle出品 | 程序人生(ID&#xff1a;coder_life)我猜&#xff0c;大多数程序员第一次接触函数的递归调用都是在算斐波那契数列某项值的时候&#xff0c;这是函数递归调用最常见的应用之一。规定第一项和第二项为1&#xff0c;后面的项&#xff0c;每一…

http请求 url 竖线_http.createServer创建http服务

语法&#xff1a;http.createServer([options][, requestListener])第二个参数requestListener&#xff0c;是一个自动添加到request事件的方法。返回一个新的 http.Server实例。之前代码是使用server.on(request,callback)来监听请求事件&#xff0c;由于http.createServer第二…

物理不突出能学计算机吗,物理成绩不突出,高中选科怎么办?3个理由让你解除后顾之忧!...

目前确定将要于2021年采用新高考“312”模式的有河北、辽宁、江苏、福建、湖南、湖北、广东和重庆8个省市。但是很多高一新生和家长们&#xff0c;面对选科问题时&#xff0c;却是犯了愁。“想选物理呢&#xff0c;物理成绩不突出&#xff0c;没有优势&#xff0c;听说选考物理…

@bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...

点击上方“匠心零度”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人来源&#xff1a;my.oschina.net/floor/blog/4325651前言1.Component解析流程找入口找核心方法概要分析2.查文档找思路3. 探寻Component派生性流程1. 确定metadataReader2.查看match方法…

centos7已有数据硬盘挂载_干货!如何给虚拟机增加虚拟硬盘,Linux再分区挂载

很多朋友一开始给虚拟机的硬盘都很小&#xff0c;用着用着虚拟硬盘就不够了&#xff0c;今天小编就给大伙说说如何给虚拟机添加虚拟硬盘在到Linux系统下分区格式化再到挂载。点击创建新的虚拟盘我分配一个8g的硬盘吧&#xff01;现在启动centos 7查看一下你刚刚添加的8G的硬盘&…

diy机器人图片 手绘纸箱_废物利用,她用几个纸箱让家里变成动物园,孩子回家乐坏了!收藏...

纸箱是我们日常生活中最常见的一种废品&#xff0c;现在随着网购的崛起&#xff0c;家里的纸箱越来越多&#xff0c;这时候你是直接丢弃&#xff0c;还是会想想是否可以再利用的价值&#xff1f;这些看似没用的纸箱&#xff0c;在创意妈的眼中可是个宝贝呢~它可以变废为宝成为孩…

计算机研究生考426分单科多少,考研初试426分,依然没被录取,他犯的错误,值得大家参考!...

原标题&#xff1a;考研初试426分&#xff0c;依然没被录取&#xff0c;他犯的错误&#xff0c;值得大家参考&#xff01;最近几天&#xff0c;考研初试成绩陆续发布。考试分数比较高的考生&#xff0c;有机会参加复试&#xff0c;就要尽早准备复试复习了。复试成绩也很重要&am…

70进货卖100利润是多少_一只周黑鸭随便就卖100多,那成本有多少?说出来你可能不信...

一只周黑鸭动不动就卖100多&#xff0c;那成本有多少&#xff1f;说出来你可能不信。如果你吃过周黑鸭&#xff0c;不知道每次想起的时候&#xff0c;尤其是午夜时分会不会有流口水的感觉&#xff0c;那种麻辣的口感&#xff0c;再搭配上冰凉爽口的啤酒&#xff0c;发自心底的那…

powerquery加载pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了

Hello.大家好&#xff0c;最近office365进行了一次小的更新&#xff0c;这次更新在excel中添加了获取pdf文件中的表格的功能&#xff0c;操作起来十分的简单&#xff0c;下面就跟大家分享下它是如何操作的首先我们新建一个excel文件&#xff0c;然后点击数据功能组&#xff0c;…

防火墙设置导致服务器站点打开,服务器、网站、环境配置全正常网站打不开原来是系统防火墙造成的...

大家都知道网站是架在服务器上的&#xff0c;通过域名解析指向网站并在服务器上绑定域名&#xff0c;上传网站程序到指定的目录&#xff0c;并只要有适合网站运行的环境&#xff0c;网站目录权限正常网站就肯定可以正常运行了&#xff0c;但今天我们技术遇到了一个问题以上所说…

web前端开发技术期末考试_智慧树来我校开展WEB前端开发微专业导学

11月17日&#xff0c;在6号教学楼6102阶梯教室&#xff0c;智慧树工作人员带来了WEB前端开发微专业导学。根据前期长青联盟微专业的报名情况及学生学习情况&#xff0c;为进一步提高学生学习微专业的质量&#xff0c;学院联系了微专业教学平台的专家对教学平台的使用进行技术指…

计算机辅助设计还需要手绘吗,西安电脑如此发达为什么还要学习手绘

在处理器以八核成为主流、硬盘以T而论的今天&#xff0c;计算机辅助设计软件是设计师的得力工具。用铅笔、尺子要时间才能画好的一个室内空间平面布置图&#xff0c;如果用CAD可能一个小时都不用就完成了&#xff0c;而且很方便修改&#xff0c;可见在效率方面&#xff0c;电脑…

一键生成通讯录的软件_橙瓜码字自动写作软件,外貌描写对话描写一键生成

很多写手对于以古代为背景的小说&#xff0c;偶尔都会对某些地方感到棘手&#xff0c;有时候是历史的背景&#xff0c;有时候是当时的官制、称呼&#xff0c;或是一些特有的服饰&#xff0c;外貌的描写&#xff0c;而面对难题&#xff0c;很多时候我们也是选择上网查询&#xf…

gin 静态文件服务器拒绝,nginx实现简单的图片服务器(windows)+静态文件服务器-Go语言中文社区...

需求&#xff1a;能够使用 http://localhost/目录/图片名 访问本地(服务器)已经存在的图片首先需要在本地将nginx跑起来&#xff0c;这里使用默认端口80&#xff1b;在浏览器使用http://localhost看到下面的界面证明nginx启动正常。下面需要修改nginx.conf来实现直接使用http:/…

wegame每次登陆都要滑动验证_Vue项目中实现用户登录及token验证

在前后端完全分离的情况下&#xff0c;Vue项目中实现token验证大致思路如下&#xff1a;1、第一次登录的时候&#xff0c;前端调后端的登陆接口&#xff0c;发送用户名和密码2、后端收到请求&#xff0c;验证用户名和密码&#xff0c;验证成功&#xff0c;就给前端返回一个toke…

云服务器 性能监控软件,云监控 - 云应用监控 - ManageEngine Applications Manager

云监控什么是云监控?尽管许多组织仍然依赖于在自托管的数据中心中存储数据的本地方法&#xff0c;但在业务组织中采用云服务的情况已经逐渐增多。自然&#xff0c;这导致了一些云监控工具的出现。无论您使用的是公共、私有还是混合环境&#xff0c;对应用程序性能具有端到端可…

mysql导入dat文件_MySql导入和抽取大数量级文件数据

一、情况介绍需要处理的文件是一个3.41G的csv格式文件&#xff0c;现在需要把它导入数据库&#xff0c;进行后续处理和分析。二、导入数据该文件数据量庞大&#xff0c;无法用excel或者editplus之类普通软件打开&#xff0c;于是借用了pandas的方法查看了表的结构&#xff1a;方…