Linux中处理文本的常用命令

news/2025/3/26 18:23:59/

有时候我们需要做简单的文本处理,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

http://www.ppmy.cn/news/1009612.html

相关文章

python 合并多个excel文件

使用 openpyxl 思路&#xff1a; 读取n个excel的文件&#xff0c;存储在一个二维数组中&#xff0c;注意需要转置。将二维数组的数据写入excel。 安装软件&#xff1a; pip install openpyxl源代码&#xff1a; import os import openpyxl # 将n个excel文件数据合并到一个…

Qt应用开发(基础篇)——时间微调输入框QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类&#xff0c;这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件&#xff0c;父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

代码分析:循环创建N个子进程——为什么最后一个属于父进程?

黑马C/C 2018年32期代码分析 //循环创建n个子进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h>int main() {int i 0;for(i0; i<3; i){//创建子进程pid_t pid fork();if(pid&…

git 生成change-id的解决方法

解决问题 1&#xff0c;在提交代码时的信息会要求添加change-id的要求&#xff0c;但对于默认的git来说&#xff0c;是不会自动生成change-id的 2&#xff0c;当git push的时候&#xff0c;报错 remote: ERROR: commit 7c30eda: missing Change-Id in message footer 解决办…

Unity Git项目添加子模块

在 当前仓库根目录下执行命令 git submodule add https://github.com/xxx/child.git 检查仓库状态 git status 更新子库 git submodule update --remote 下拉父仓库Git并保住子库也更新 git pull --recurse-submodules 推荐使用 Githubdesktop工具 这样你可以更清楚的看到自己…

Map按key、value、对象字段排序

Map按key、value、对象字段排序 在Java中&#xff0c;我们常常使用Map来存储键值对数据。然而&#xff0c;有时候我们需要对Map中的元素进行排序&#xff0c;可能按照key排序&#xff0c;可能按照value排序&#xff0c;甚至是按照对象字段排序。本文就将介绍如何使用Java去实现…

基于java摄影网站设计与实现

摘 要 随着时代的进步&#xff0c;社会生产力高速发展&#xff0c;新技术层出不穷信息量急剧膨胀&#xff0c;整个社会已成为信息化的社会人们对信息和数据的利用和处理已经进入自动化、网络化和社会化的阶段。如在查找情报资料、处理银行账目、仓库管理、科研生产等方面&#…

C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)

目录 定义operator重载运算符operator重载函数调用运算符operator类型转换操作符 定义 C11 中&#xff0c;operator 是一个关键字&#xff0c;用于重载运算符。通过重载运算符&#xff0c;您可以定义自定义类型的对象在使用内置运算符时的行为。 operator重载用法一般可以分为…