文本处理

本文介绍Linux环境下常用的文本处理工具和命令,包括less、cat、head、tail等的基础使用方法,以及如何通过cut、paste等工具进行数据列的抽取与合并。此外还详细讲解了grep的正则表达式应用,帮助读者掌握高效的数据处理技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本处理

1.文本处理工具:

1 文件内容:less和 cat
2 文件截取:head和tail
3  按列抽取:cut
4  按关键字抽取:grep

2.文本查看

文件查看命令:cat tac rev
cat -v 显示非打印字符
-E 显示$
-T 显示TAB
-n 显示行号
-s 将连续的重复行变成一行
-A = -vET

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

Tac
这里写图片描述
Rev
rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
这里写图片描述

3.分页查看文件内容

 more: 分页查看文件
more [OPTIONS…] FILE…
-d: 显示翻页及退出提示
 less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器

4显示文本前或后行内容

e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异; -N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符
head
-n 行号 显示前n行
-行号 显示前n行
-c 字节数 显示前n个字节

tail
-n 行号 显示后n行
-行号 显示后n行
-c 字节数 显示后n个字节
-f 动态显示
head
这里写图片描述
Head - c
这里写图片描述
Tail –n
这里写图片描述
Tail -2
这里写图片描述
Tail –c
这里写图片描述
Tail –f

这里写图片描述
显示实时信息
这里写图片描述

这里写图片描述

练习:
显示/etc/passwd文件的第11行至第20行
head -n 20 /etc/passwd |tail -11
利用 cat /dev/urandom 生成10位字符长度的随机密码(包含大小写字母及数字)
cat /dev/urandom | tr -d -c ‘[:alnum:][:punct:]’ | head -c 10 ;echo

5按列抽取文本cut和合并文件paste

5.1cut [OPTION]… [FILE]…

d DELIMITER: 指明分隔符,默认tab
-f FILEDS:

1.#第#个字段
2.#,#[,#]:离散的多个字段,例如1,3,6 #-#
3.连续的多个字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING指定输出分隔符

例如:

1查看 /etc/passwd 的第一列
[root@localhost app]# cut -d: -f 1 /etc/passwd
2查看 /etc/passwd 的用户名和UID
这里写图片描述
3查看 /etc/passwd 的用户名到UID的信息
这里写图片描述
4.换输出的单引号
这里写图片描述

练习

1.显示当前主机第一个网卡的IP地址
ifconfig |head -n 2| tail -n 1| tr -s ’ ’ : |cut -d: -f4

2.查出/app目录的空间使用量
df|tr -s [[:space:]]|head -n 4|tail -n 1|cut -d ’ ’ -f5|cut -d ‘%’ -f1
df|tr -s ” ” % |head -n 4 |tail -n 1 |cut -d% -f5
df |head -n 8 |tail -n 1 |cut -c 44-46
3.利用 cat /dev/urandom 生成10位字符长度的随机密码(包含大小写字母及数字)
这里写图片描述
cat /dev/urandom | tr -d -c ‘[:alnum:][:punct:]’ | head -c 10 ;echo (大小写字母数字特殊号)
-d 指定分隔符
-f 选取第几列
n
n-r
n,n-r
–output-delimiter 指定输出符

cut -d: -f1,3 --output-delimiter='|' /etc/passwd

 显示文件或STDIN数据的指定列
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
这里写图片描述

5.2.paste 合并两个文件同行号的列到一行

paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默认用TAB
这里写图片描述
-s : 所有行合成一行显示

paste f1 f2
这里写图片描述
paste -s f1 f2
这里写图片描述
5分析文本的工具
 文本数据统计:wc
 整理文本:sort
 比较文件:diff和patch

5.3收集文本统计数据wc

 计数单词总数、行总数、字节总数和字符总数
 可以对文件或STDIN中的数据运行
$ wc story.txt
39 237 1901 story.txt
行数 字数 字符数
 使用 -l 来只计数行数
 使用 -w 来只计数单词总数
 使用 -c 来只计数字节总数
使用 -m 来只计数字符总数
这里写图片描述

这里写图片描述

6文本排序sort

 把整理过的文本显示在STDOUT,不改变原始文件
$ sort [options] file(s)
 常用选项
 -r 执行反方向(由上至下)整理
 -n 执行按数字大小整理
 -f 选项忽略(fold)字符串中的字符大小写
 -u 选项(独特,unique)删除输出中的重复行
 -t c 选项使用c做为字段界定符
 -k X 选项按照使用c字符分隔的X列来整理能够使用多次

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

7.uniq

 uniq命令:从输入中删除前后相接的重复的行
 uniq [OPTION]… [FILE]…
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
连续且完全相同方为重复
 常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
这里写图片描述
Uniq -d
这里写图片描述

8.比较文件

 比较两个文件之间的区别
difffoo.confbrokenfoo.confworks5c5<usewidgets=no>usewidgets=yes5patchdiff使uunifieddiffpatch使b diff -u foo.conf-broken foo.conf-works > foo.patch
$ patch -b foo.conf-broken foo.patch
这里写图片描述

这里写图片描述

补丁

这里写图片描述

Patch
这里写图片描述

有centos7,生成的补丁导入centos6里,实例:
这里写图片描述

这里写图片描述

练习
 1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
[root@localhost ~]# ifconfig |head -2|tail -1|tr -s ” ” :|cut -d: -f3
 2、查出分区空间使用率的最大百分比值
[root@localhost ~]# df|tr -s ’ ’ %|sort -t% -k5 -n|tail -1|cut -d% -f5
 3、查出用户UID最大值的用户名、UID及shell类型
cat /etc/passwd |cut -d: -f1,3,7|sort -n -t : -k 2|tail -n 1
 4、查出/tmp的权限,以数字方式显示
[root@localhost ~]# stat /tmp |head -4|tail -1|cut -d/ -f1|cut -d’(’ -f2
1777
[root@localhost ~]# stat -c %a /tmp/
1777

 5、统计当前连接本机的每个远程主机IP的连接数,并按从大
到小排序
[root@localhost ~]# netstat -tun|grep ESTAB|tr -s ’ ’ :|cut -d: -f6|sort -nr|uniq -c

9正则表达式

Grep
1、作用:
文本搜索工具,根据用户指定的“模式”对目标文
本逐行进行匹配检查;打印匹配到的行
2,模式:
由正则表达式字符及文本字符所编写的过滤条件
1.命令格式:
grep [option] pattern file
grep root /etc/passwd
grep “USER/etc/passwdgrepUSER’ /etc/passwd
grep whoami /etc/passwd
3,grep命令选项及功能
–color=auto: 对匹配到的文本着色显示
 -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,不支持正则表达式

实例:
1.调用变量和命令执行的结果
这里写图片描述
2.grep –color=auto: 对匹配到的文本着色显示
这里写图片描述

2.5 grep -v 显示不被pattern匹配到的行

这里写图片描述

3grep -i 忽略大小写

这里写图片描述

4 grep -n 显示行号
这里写图片描述
5 grep -c 行数
这里写图片描述
6.grep -o 显示匹配的字符串
这里写图片描述
7.grep -q 静默模式,不输出任何信息
这里写图片描述
Ping
这里写图片描述
grep:
这里写图片描述

这里写图片描述

8 Grep -A/B显示搜索内容的前三行和后三行

这里写图片描述

这里写图片描述

这里写图片描述
Grep-c 2 显示前2行和后2行
这里写图片描述

9 grep -e 关键字1 -e 关键字2 实现多个选项间的逻辑or关系
这里写图片描述

这里写图片描述
10 grep -w 匹配整个单词
这里写图片描述

10.规则表达式:

分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep
 正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
 元字符分类:字符匹配、匹配次数、位置锚定、分组
 man 7 regex

grep 的规则表达式:
字符匹配
. #匹配单个字符,如 ‘gr.p’ 匹配gr 后接一个任意字符,然后是 P.
[]  #匹配一个指定范围内的字符,如 ‘[Gg]rep’匹配 Grep 和grep 。
???[^] #匹配一个不在指定范围内的字符,如 ‘[^A-FH-Z]rep’ 匹配不包含A-R和 T-Z的一个字母开头,紧跟 rep 的行。
[:alnum:]  字母和数字
[:alpha:]   英文大小EP写,A-Z,a-z
[:digit:]   十进制数字字符 [:xdigit:]十六进制数字(0-9,a-f,A-F)R
[:graph:]   非空白字符(非空格、控制字符)
[:blank:] 空白字符(空格和制表符)
[:lower:]    小写字符 a-z
[:upper:]    大写字符 = A-Z
[:cntrl:]    控制字符 (退格,删除,响铃。。。)
[:print:]    可打印的字符(包括空格)
[:punct:]    标点符号
[:space:]    所有空白字符(新行,空格,制表符)
1 grep .
这里写图片描述
2 grep []
这里写图片描述
3.grep [^]
这里写图片描述
4.
这里写图片描述

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次 如 ‘*grep ’ 匹配所有一个或多个空格后紧跟 grep 的行。
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
x{m}  #重复字符x,m 次,如 ‘0{5}’匹配包含5个0的行。
x{m,}  #重复字符x,至少m次,如 ‘o{5,}’ 匹配至少有5个o 的行。
x{m,n}  #重复字符x,至少m次,不多于n次,如 ‘o{5,10}’匹配5–10个o的行。
{,n} 匹配前面的字符至多n次
1
这里写图片描述
2.grep x{m} 
这里写图片描述
3.x{m,n}
这里写图片描述
 位置锚定:定位出现的位置
这里写图片描述
1这里写图片描述
2这里写图片描述
3这里写图片描述
 分组:() 将一个或多个字符捆绑在一起,当作一个整体进
行处理,如:(root)+

 分组括号中的模式匹配到的内容会被正则表达式引擎记录于
内部的变量中,这些变量的命名方式为: \1, \2, \3, …
 \1 表示从左侧起第一个左括号以及与之匹配右括号之间的
模式所匹配到的字符
 示例:
(string1+(string2)*)
\1 :string1+(string2)*
\2 :string2
 后向引用:引用前面的分组括号中的模式所匹配字符,而非
模式本身
 或者:|
示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat
实例:
1
这里写图片描述
2这里写图片描述
3这里写图片描述
4这里写图片描述
5这里写图片描述
6这里写图片描述

5.POSIX字符:
为了在不同国家的字符编码中保持一至,POSIX(the portable operating system interface )增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。
要把它们放到[]号内才能成为正则表达式,如[A-Za-z0-9] 或[[:alnum:]]。在Linux下的grep 除fgrep 外,都支持 POSIX的字符类。
练习:
 1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两
种方法)
cat /proc/meminfo|grep “^[Ss]”
cat /proc/meminfo|grep -i “^s”
cat /proc/meminfo|grep -e ^s -e ^S
cat /proc/meminfo|grep “^s|^S”
cat /proc/meminfo|grep “^[s|S]”
 2、显示/etc/passwd文件中不以/bin/bash结尾的行
[root@localhost ~]# cat /etc/passwd|grep -v “/bin/bash\b”
[root@localhost ~]# grep -v “/bin/bash$” /etc/passwd
 3、显示用户rpc默认的shell程序
[root@localhost ~]# grep “rpc>” /etc/passwd|cut -d: -f7
[root@localhost ~]# grep -w “rpc” /etc/passwd|cut -d: -f7
 4、找出/etc/passwd中的两位或三位数
[root@localhost ~]# grep “\<[0-9]{2,3}>” /etc/passwd
 5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白
字符开头的且后面存非空白字符的行
[root@localhost ~]# cat /etc/grub2.cfg|grep “^[[:space:]+ [^[:space:]]”
这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值