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 分钟前
Logstash 安装与部署(无坑版)
运维·jenkins
Vane Zhang11 分钟前
VirtualBox7.1.0 安装 Ubuntu22.04.5 虚拟机
linux
sysin.org12 分钟前
Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux
linux·ubuntu
MonkeyKing_sunyuhua13 分钟前
Ubuntu 中无法直接使用 `conda` 命令,设置conda的环境变量
linux·ubuntu·conda
自律的kkk16 分钟前
docker配置镜像加速器
运维·docker·容器
繁依Fanyi1 小时前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
shuxianshrng1 小时前
鹰眼降尘系统怎么样
大数据·服务器·人工智能·数码相机·物联网
小狮子安度因1 小时前
边缘智能-大模型架构初探
linux·网络
晨春计1 小时前
【git】
android·linux·git
优思学院1 小时前
优思学院|如何从零开始自己学习六西格玛?
大数据·运维·服务器·学习·六西格玛黑带·cssbb