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:\] 所有字母字符与数字

  • :blank:\] 所有水平空格

  • :digit:\] 所有数字

  • :lower:\] 所有小写字母

  • :punct:\] 所有标点字符

  • :upper:\] 所有大写字母

    所有小写字母改为大写字母

    echo 'hello WORLD' | tr [:lower:] [:upper:]
    HELLO WORLD

相关推荐
正经教主5 分钟前
【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题
运维·docker·容器·n8n
sukida10010 分钟前
BIOS主板(非UEFI)安装fedora42的方法
linux·windows·fedora
●^●29 分钟前
Linux 权限修改详解:chmod 命令与权限数字的秘密
linux
唯独失去了从容32 分钟前
WebRTC服务器Coturn服务器中的通信协议
运维·服务器·webrtc
光而不耀@lgy1 小时前
C++初登门槛
linux·开发语言·网络·c++·后端
joker_zsl2 小时前
docker的安装和简单使用(ubuntu环境)
运维·docker·容器
偶尔微微一笑2 小时前
AI网络渗透kali应用(gptshell)
linux·人工智能·python·自然语言处理·编辑器
Run1.2 小时前
深入解析 Linux 中动静态库的加载机制:从原理到实践
linux·运维·服务器
VI8664956I262 小时前
全链路自动化AIGC内容工厂:构建企业级智能内容生产系统
运维·自动化·aigc
The Mr.Nobody2 小时前
STM32MPU开发之旅:从零开始构建嵌入式Linux镜像
linux·stm32·嵌入式硬件