Linux文本处理工具

Stella981
• 阅读 633

Linux文本处理工具

Linux中熟练的使用文本处理工具非常的重要, 因为Linux在设计的时候是采用一切皆文件的哲学的, 甚至连计算机中的配置也都使用伪文件系统来表示, 要查询里面的内容就是对文件进行操作, 所以学会使用文件处理工具事半功倍。而在一切皆对象的Windows中, 因为对象封装了所有的操作, 包括显示标准输出的结果, 使用过powershell的人应该知道, 标准输出流显示的结果, 也就是控制台上显示的结果也都是对象, 而不是单纯的文本, 我们可以获取这个对象并调用器API对他进行更近一步的操作, 这个可以说是Windows平台上的一个优点

find

  • -name
  • -type: f, d
  • -maxdepth: 查找的深度, 也就是目录递归的深度, 为1就是在当前目录查找
  • -regex: 正则表达式匹配, 是全路径匹配
  • -iregex: 忽略大小写的正则表达式匹配
  • -delete: 删除找到的文件或者目录
  • -print: 打印出结果, 默认就是这个选项, 打印出来的结果默认是\n分隔的
  • -print0: 将打印出来的结果使用\0进行分隔
  • -exec {} ;
  • -atime: 访问时间, 单位是天, -atime 3 表示3天内访问
  • -mtime: 修改内容时间
  • -ctime: 修改元数据时间, 只要出发了atime或者mtime, ctime一定会改变
  • -amin: 和atime一样, 只是单位为分钟
  • -mmin: 和mtime一样, 只是单位为分钟
  • -cmin: 和ctime一样, 只是单位为分钟
  • -user
  • -perm
  • -newer
  • -nouser
  • -nogroup
  • -size: -size +5M -size -10M, 表示在5-10M的文件或则目录
  • 分组使用( ): find . ( -name '.txt' -o -name '.pdf' ) -print

grep

  • -e: 多模式匹配
  • -c: 计数
  • -o: 只显示查找到的结果, 在没有指明-o选项时显示的是匹配到一行
  • -v: 只输出没有匹配到的行
  • -n: 打印行号
  • -i: 忽略大小写
  • -l: 只打印文件名
  • -R: 递归

xargs

  • 将输入的数据转换为特定的_命令行参数_, 与普通的如ls | grep -n 'python'不同, 这里的grep通过管道接受到的是输入的数据不是命令行参数

sort

  • -k: 指定第几列进行排序
  • -d: 按照字典进行排序
  • -n: 按照数据进行排序
  • -r: 逆序

uniq

  • -c: 统计
  • -d: 打印重复行
  • -u: 去掉重复行

wc

  • -l: 行数
  • -w: 单词书
  • -c: 字符数

sed(文本替换利器)

  • -e: 多模式匹配, sed -e '/^$/d' -e '///.*/d' file 删除空白行和注释行
  • s: 表示replace
  • g: 表示全局
  • -i: 表示inplace
  • sed 's/text/replacetext/' file
  • sed 's/text/replacetext/g/' file # 全局替换
  • sed -i 's/text/replacetext' file # 直接修改到原文件中
  • sed '/^$/d' file 删除空白行
  • sed '///.*$/d' file 删除C语言的注释
  • sed '/^#.*$/d' file 删除Python注释
  • sed 's/[a-z]+/\U&/' file 转大写, 只在Linux中有效, 在macOS上无效
  • sed 's/[A-Z]+/\L&/' file 转小写, 在macOS上无效

paste(文本合并, 与cut相反)

  • 将两个文本按照列合并
  • -d: 指明合并之后使用什么分隔

tr(是简化版本的sed, 当tr不能完成的时候使用sed, 因为tr对正则表达式支持不好)

  • -s: 压缩字符, tr -s '\n' file, 遇到连续的两个\n将其压缩成为一个, 功能是删除空行
  • -c: 取补集, tr -c 'a-z' 则取的就是在a-z之外的
  • -d: 删除匹配的

总结

  • 开发者常用的是sed, tr, find 和 grep
  • 在处理文本替换的时候使用sed, tr在加密的时候使用cat /dev/urandom | head -c 64 | tr -d -c 'a-zA-Z0-9_'
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这