Linux文本处理工具和正则表达式
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,抽取文本的工具文件内容:cat,less,more文件截取:head,tail按列抽取:cut排序和统计:sort,wc按关键字抽取:grep文件查看命令cat,nl,tac,revcat [OPTI
千家信息网最后更新 2025年12月02日Linux文本处理工具和正则表达式
抽取文本的工具
- 文件内容:cat,less,more
- 文件截取:head,tail
- 按列抽取:cut
- 排序和统计:sort,wc
- 按关键字抽取:grep
文件查看命令
cat,nl,tac,rev
- cat [OPTION]... [FILE]...
-E:显示行结束符$-n:对显示出的每一行进行编号-A:显示所有控制符-b:非空行编号-s:压缩连续的空行成一行 - nl 显示行号
- tac 反向连接和打印文件
- rev 反向打印行字符
分页查看文件内容
- more:分页查看文件
more [OPTIONS...] FILE...-d: 显示翻页及退出提示 - less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:/文本 搜索 文本n/N 跳到下一个 或 上一个匹配less 命令是man命令使用的分页器
显示文本前或后行内容
- head [OPTION]... [FILE]...
-c # 指定获取前#字节-n # 指定获取前#行-# 同上 - tail [OPTION]... [FILE]...
-c # 指定获取后#字节-n # 指定获取后#行-# 同上-f 跟踪显示文件fd新追加的内容,常用日志监控相当于 --follow=descriptor-F 跟踪文件名,相当于--follow=name --retry - tailf 类似tail -f,当文件不增长时并不访问文件
按列抽取文本cut和合并文件paste
- cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab-f FILEDS:#: 第#个字段#,#[,#]:离散的多个字段,例如1,3,6#-#:连续的多个字段, 例如1-6混合使用:1-3,7-c 按字符切割--output-delimiter=STRING指定输出分隔符显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwdcat /etc/passwd | cut -d: -f7cut -c2-5 /usr/share/dict/words - paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...-d 分隔符:指定分隔符,默认用TAB-s : 所有行合成一行显示示例:
paste f1 f2paste -s f1 f2
分析文本的工具
- 文本数据统计:wc
- 整理文本:sort
- 比较文件:diff和patch
收集文本统计数据wc
可用于统计文件的行总数、单词总数、字节总数和字符总数
可以对文件或STDIN中的数据统计
wc story.txt39 237 1901 story.txt行数 字数 字节数常用选项
-l 只计数行数-w 只计数单词总数-c 只计数字节总数-m 只计数字符总数-L 显示文件中最长行的长度文本排序sort
把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)常用选项
-r 执行反方向(由上至下)整理-R 随机排序-n 执行按数字大小整理-f 选项忽略(fold)字符串中的字符大小写-u 选项(独特,unique)删除输出中的重复行-t c 选项使用c做为字段界定符-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次uniq
uniq命令:从输入中删除前后相接的重复的行
uniq [OPTION]... [FILE]...-c: 显示每行重复出现的次数-d: 仅显示重复过的行-u: 仅显示不曾重复的行注:连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c比较文件
比较两个文件之间的区别
diff foo.conf foo2.conf5c5< use_widgets = no---> use_widgets = yes注明第5行有区别(改变)
复制对文件改变patch
diff 命令的输出被保存在一种叫做"补丁"的文件中 使用 -u 选项来输出"统一的(unified)"diff格式文件,最适用于补丁文件 patch 复制在其它文件中进行的改变(要谨慎使用)适用 -b 选项来自动备份改变了的文件diff -u foo.conf foo2.conf > foo.patchpatch -b foo.conf foo.patchgrep:文本过滤(模式:pattern)工具
- grep
- egrep
- fgrep(不支持正则表达式搜索)
作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]grep root /etc/passwdgrep "$USER" /etc/passwdgrep '$USER' /etc/passwdgrep `whoami` /etc/passwdgrep命令选项
--color=auto: 对匹配到的文本着色显示-m # 匹配#次后停止-v 显示不被pattern匹配到的行-i 忽略字符大小写-n 显示匹配的行号-c 统计匹配的行数-o 仅显示匹配到的字符串-q 静默模式,不输出任何信息-A # after, 后#行-B # before, 前#行-C # context, 前后各#行-e 实现多个选项间的逻辑or关系grep -e 'cat ' -e 'dog' file-w 匹配整个单词-E 使用ERE-F 相当于fgrep,不支持正则表达式-f file 根据模式文件处理正则表达式
- REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
- 程序支持:vim, less,grep,sed,awk, nginx,varnish等
- 分两类:
基本正则表达式:BRE,grep,vim扩展正则表达式:ERE,grep -E, egrep,nginx - 正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块PCRE(Perl Compatible Regular Expressions)- 元字符分类:字符匹配、匹配次数、位置锚定、分组
- man 7 regex
基本正则表达式元字符
字符匹配:
. 匹配任意单个字符[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z][^] 匹配指定范围外的任意单个字符[:alnum:] 字母和数字[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z[:lower:] 小写字母 [:upper:] 大写字母[:blank:] 空白字符(空格和制表符)[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)[:digit:] 十进制数字 [:xdigit:]十六进制数字[:graph:] 可打印的非空白字符[:print:] 可打印字符[:punct:] 标点符号匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配).* 任意长度的任意字符\? 匹配其前面的字符0或1次\+ 匹配其前面的字符至少1次\{n\} 匹配前面的字符n次\{m,n\} 匹配前面的字符至少m次,至多n次\{,n\} 匹配前面的字符至多n次\{n,\} 匹配前面的字符至少n次位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧$ 行尾锚定,用于模式的最右侧^PATTERN$ 用于模式匹配整行^$ 空行^[[:space:]]*$ 空白行\< 或 \b 词首锚定,用于单词模式的左侧\> 或 \b 词尾锚定,用于单词模式的右侧\ 匹配整个单词 分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例: \(string1\(string2\)\)\1 :string1\(string2\)\2 :string2后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:|
示例:a\|b a或bC\|cat C或cat\(C\|c\)at Cat或categrep及扩展的正则表达式
- egrep = grep -E
- egrep [OPTIONS] PATTERN [FILE...]
- 扩展正则表达式的元字符:
- 字符匹配:
. 任意单个字符[] 指定范围的字符[^] 不在指定范围的字符次数匹配:
* 匹配前面字符任意次? 0或1次+ 1次或多次{m} 匹配m次{m,n} 至少m,至多n次位置锚定:
^ 行首$ 行尾\<, \b 语首\>, \b 语尾分组:
()后向引用:\1, \2, ...
或者:
a|b a或bC|cat C或cat(C|c)at Cat或cat
字符
文件
文本
模式
正则
表达式
命令
总数
次数
统计
输出
内容
单词
字节
范围
分组
工具
一行
位置
元字符
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器投影仪无信号源蓝屏
网络安全与技术专业能考什么证
济南混合现实软件开发
小学网络安全管理经验交流
我的世界服务器语言
sql数据库设计题
手机上连数据库的app下载
入门数据库总结
陕西电商软件开发工具
画出网络安全通用模型简要说明
网络安全招聘实习生
济南计算机软件开发机构
房管局数据库app
西安智能建模软件开发
软件开发也是我们团队的优势
qcon全球软件开发视频
网络安全设备为什么用CF卡
新交互服务器地址
互联网零售科技工作经验
江苏球讯网络技术有限公司
如何连接打印服务器
数据库系统以什么形式显示
轩辕服务器安全吗
护猫.网络安全课
软件开发分层后如何部署
当前连接不到服务器怎么回事
吴爱芳网络技术
福州中旭网络技术公司招聘
天津科大讯飞软件开发
苏州办公系统软件开发哪里有