Linux中处理文本的常用命令

有时候我们需要做简单的文本处理,Linux中的文本处理命令十分强大,能够提供非常大的便利。这篇博客介绍几个常用的文本处理的命令。

grep

行过滤工具;用于查找文件里符合条件的字符串。

语法

grep 选项 '关键字' 文件名

常用选项

  • -i 不区分大小写
  • -v 查找不包含指定内容的行,反向选择
  • -w 按单词搜索
  • -o 打印匹配关键字
  • -c 统计匹配的次数
  • -n 显示行号
  • -r 逐层遍历目录查找
  • -A 显示匹配行及后面多少行
  • -B 显示匹配行及前面多少行
  • -C 显示匹配行及前后多少行
  • -l 只列出匹配的文件名
  • -L 列出不匹配的文件名
  • -e 使用正则匹配
  • -E 使用扩展正则匹配
  • ^key 以关键字开头
  • key$ 以关键字结尾
  • ^$ 匹配空行
  • --color=auto 可以将找到的关键词部分加上颜色的显示

测试

复制代码
> cat test.txt
Hello
World
Linux
Ubuntu

> grep -inw 'linux' test.txt
3:Linux

cut工具

列截取工具;用于文本文件列的截取。

语法

cut 选项 文件名

常用选项

  • -c 以字符为单位进行分割,截取
  • -d 自定义分割符,默认为制表符\t
  • -f 与-d一起使用,指定截取哪个区域

测试

复制代码
> cat test.txt
Hello World
Linux Ubuntu

# 按空格分隔 截取第一列内容
> cut -d ' ' -f1 test.txt
Hello
Linux

# 截取文件中每行的1到5个字符
> cut -c1-5 text.txt 
Hello
Linux

sort工具

sort工具用于排序,它将文件的每一行做为一个单位,从首字符向后,依次按ACSII 码值进行比较,最后将他们按升序输出。

语法

sort 选项 文件

常用选项

  • -u 去除重复行
  • -r 降序排列,默认是升序
  • -o 将排序结果输出到文件中,类似重定向符号>
  • -n 以数字排序,默认是按字符排序
  • -t 分割符
  • -k 第N列
  • -b 忽略每行前面开始出的空格字符

测试

复制代码
> cat test.txt
DDD
AAA
CCC
BBB

> sort test.txt
AAA
BBB
CCC
DDD

> cat test.txt
DDD	2
AAA 4
CCC 5
BBB	1

#  以空格分割第2行升序排列
> sort -t ' ' -k2 test.txt
BBB	1
DDD	2
AAA 4
CCC 5

uniq

uniq用于去除连续的重复行

语法

uniq 选项 文件

常用选项

  • -u 只显示没有重复的纪录
  • -c 统计重复行次数
  • -d 只显示重复行

测试

复制代码
> cat test.txt
AAA
BBB
BBB
bbb
CCC
AAA

> uniq test.txt
AAA
BBB
bbb
CCC
AAA

> uniq -u test.txt
AAA
bbb
CCC
AAA

tee工具

tee工具时从标准输入读取并写入到标准输出和文件。即:双向覆盖重定向(屏幕输出|文本输入)。

语法

tee 参数 文件

常用选项

  • -a 附加到既有文件的后面,而非覆盖它

测试

复制代码
> echo 'hello word' | tee test.txt
> cat test.txt
hello world

diff

diff工具逐行比较文件的不同。

语法

diff 选项 文件1 文件2

常用选项

  • -b 不检查空格
  • -B 不检查空白行
  • -i 不检查大小写
  • -w 忽略所有的空格
  • --normall 正常格式显示(默认)
  • -c 上下文格式显示
  • -u 合并格式显示

测试

复制代码
> cat file1.txt
AA
CC
BB
QQ

> cat file2.txt
CC
DD
AA

> diff file1.txt file2.txt
1d0  # 第一个文件要删除第一行才能与第二个文件的0行匹配
< AA 	# 后面的文件需要添加
3,4c2,3	# 第一个文件3,4行要改变才能与第二个文件的2,3行匹配
< BB  # 后面的文件需要添加
< QQ # 后面的文件需要添加
---
> DD # 前面的文件需要添加
> AA # 前面的文件需要添加 

> diff file1.txt file2.txt -y
AA  <
CC 	CC
BB 	| DD
QQ	| AA

注意

"|"表示前后2个文件内容有不同,"<"表示后面文件比前面文件少了1行内容,">"表示后面文件比前面文件多了1行内容。

paste

paste工具用于合并文件行

语法

paste 参数 文件1 文件2

常用选项

  • -d 自定义间隔符,默认是tab
  • -s 串行处理,非并行 第一行第一个文件,第二行第二个文件

测试

复制代码
> cat file1.txt
AA
CC
BB
QQ

> cat file2.txt
CC
DD
AA

> paste file1.txt file2.txt
AA  CC
CC  DD
BB  AA
QQ

tr

tr用于字符转换、替换和删除,主要用于删除文件中控制字符或进行字符转换。

语法

tr 参数 字符串1 字符串2

常用选项

  • -d 删除字符串1中所有输入字符
  • -s 删除所有重复出现字符序列,只保留第一个,即将重复出现字符串压缩为一个字符串
  • a-z
  • A-Z
  • 0-9
  • :alnum: 所有字母字符与数字
  • :alpha: 所有字母字符
  • :blank: 所有水平空格
  • :cntrl: 所有控制字符
  • :digit: 所有数字
  • :graph: 所有可打印的字符(不包含空格符)
  • :lower: 所有小写字母
  • :print: 所有可打印的字符(包含空格符)
  • :punct: 所有标点字符
  • :space: 所有水平与垂直空格符
  • :upper: 所有大写字母

测试

复制代码
# 所有小写字母改为大写字母
> echo 'hello WORLD' | tr [:lower:] [:upper:]
HELLO WORLD
相关推荐
星释6 小时前
鸿蒙智能体开发实战:23.常见问题
服务器·华为·ai·harmonyos·鸿蒙·智能体
天空'之城6 小时前
Linux 系统编程 22:五种 IO 模型全解
linux
小张成长计划..7 小时前
【Linux】10:冯·诺依曼体系结构和操作系统
linux·运维·服务器
悦儿遥遥雨110 小时前
PXE + Kickstart 无人值守批量部署系统
linux·javascript·nginx
m0_5648768411 小时前
没有公网IP的情况下,怎么进行远程连接两个电脑
服务器·tcp/ip·负载均衡
Imagine Miracle11 小时前
【WSL】让WSL2后台持久运行不自动关闭的解决方案
linux·windows·wsl
兔C11 小时前
Linux 命令行入门学习资料 day_2
linux·运维·服务器
eggcode12 小时前
Linux命令基础与操作技巧
linux
多巴胺梦想家12 小时前
事务与并发控制:当多人同时操作数据库
服务器·数据库·oracle
二宝哥12 小时前
VMware Workstation 实战:CentOS 7.9 安装、桥接网络配置与克隆管理详解
linux·centos·vmware