【Linux】【实战系列】10 分钟掌握日常开发中 Linux 文本与文件处理命令

文章目录

文本查看和处理

cat

  • cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
bash 复制代码
命令格式:
cat [-AbeEnstTuv] [--help] [--version] fileName

常用参数:
-n 或 --number:由 1 开始对所有输出的行数编号
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行

// 日常工作中我们可以用来读取文件
cat log.txt

// 读取 log.txt 的数据进行编号并写入到 log1.txt
cat -n log.txt > log1.txt

// 清空 log.txt 文件 注:这个只是为了炫技没有任何用处,劝大家少用
// 在类 Unix 系统中,/dev/null 称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个 EOF。
cat /dev/null > log.txt

tail

  • tail 命令常用于查看文件的内容,经常和 -f 一起使用常看正在改变的文件,比如程序正在打印的日志。
  • 默认只打印文件末尾 10 行。
bash 复制代码
命令格式:
tail [参数] [文件]

tail log.txt

常用参数:
-f:循环打印正在发生改变的文件,如我们在工作中常用于读取正在程序正在打印的日志文件

tail -f log.txt

-n:命令默认打印文件末尾 10 行数据,可以使用 -n 指定行数

tail -n 20 log.txt // 读取文件末尾 20 行数据

tail -n +20 log.txt // 读取从 20 行开始到末尾的数据

// 这里推荐一个缩写的写法:读取末尾 200 行同时循环打印正在改变的文件
tail -200f log.txt
  • 前面我们使用 tail 来读取文件的末尾,如果我们现在要读取文件的首行内容怎么办呢?当然我们可以使用 tail 从读取,那么你要读取的数据也太多了,我们可以使用 head 实现
bash 复制代码
命令格式:
head [参数] [文件]

// 默认读取文件前 10 行数据
head log.txt

常用参数:
-c<数目> 显示的字节数
-n<行数> 显示的行数

// 显示文件前 20 行
head -n 20 log.txt

// 显示文件前 20 个字节
head -c 20 log.txt

more & less

  • 前面我们了解了 tail & head 可以从头或者尾查看文件,如果我们文件很大且需要每页依次读取怎么办呢?别慌我们还有 more 和 less 命令。

more

  • Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似).
bash 复制代码
命令格式:
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

more log.txt

常用参数:
-num 一次显示的行数
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数

// 比如我们读取文件 log.txt 从第 5 行开始显示 一次显示 10 行 且匹配文件前匹配 nginx 字符串后开始显示
 more -10 +3 +/nginx log.txt

less

  • less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页,大家有兴趣可以了解一下。
bash 复制代码
命令格式:
less [参数] 文件 

grep

  • Linux grep (global regular expression) 命令用于查找文件里符合条件(字符串或正则表达式)的文件或对应行。
bash 复制代码
命令格式:
grep [参数] pattern [文件]

grep -c 2 'test' log.txt
grep -c 2 'test' log.txt

常用参数:
-i:忽略大小写进行匹配
-v:反向查找,只打印不匹配的行
-r:递归查找子目录中的文件
-l:只打印匹配的文件名
-c:只打印匹配的行数

// 日常我们使用经常的参数有 -i 和 -c , 如实现匹配 log.txt 中 包含 test 字符串(忽略大小写)的行,并展示匹配行的上下两行

grep -i -c 2 'test'  log.txt

-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用,看着有点绕,我们来看看具体的案例,你会发现也可以使用直接使用正则表达式实现这个功能
// 当我们需要匹配多个关键字时是一个很有用的功能,比如我们可以这样使用:

// 匹配包含 test 或 hello 关键字的行 
grep -c 2 -e 'test|hello' log.txt

// 匹配同时包含 test 和 hello 关键字 
grep -c 2 -e 'test&hello' log.txt

组合融合技

  • 我们日常工作中会有这样一个场景,读取正在打印的日志文件同时匹配包含对应字符串的行,我们可以这样实现:
bash 复制代码
tail -f log.txt | grep -i 'test'
注:此处 grep 不支持 -c 仅使用 grep 匹配功能


// 或者我们只想匹配前 20 行
head -n 20 log.txt |  grep -C 2 -i 'bash'
  • 在日常开发中,我们可以去尝试使用这些命令的组合使用,你可能会收获到想不到的惊喜。

awk

  • AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
  • awk 命令很强大也很复杂,但在日常实际工作场景中其实使用得不多,这里我做一些简单的介绍,有兴趣的朋友可以去了解。
bash 复制代码
命令格式:
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

// 用法简单示例
log.txt文本内容如下:
2 this is a test
3 Do you like awk
This's a test
10 There are orange,apple,mongo

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo

文本编辑

vi & vim

  • 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
  • vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计,比如有一些大佬使用 vim 写程序,我还没体验过。

三种模式

  • vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
bash 复制代码
用户刚刚启动 vi/vim,便进入了命令模式。

在命令模式下按下i就进入了输入模式,使用Esc键可以返回到普通模式。

在命令模式下按下 :(英文冒号)就进入了底线命令模式。

使用

基本使用
  • 使用 vi/vim 进入一般模式 vim test.text(若 test.text 保存时会创建)
  • 按下i就进入了输入模式
  • 按下 :(英文冒号)就进入了底线命令模式并输入 wq 命令保存退出
其它使用技巧
  • 进入一般模式后我们可以使用 /匹配字符 进行搜索
  • Ctrl + U 可以进行整行删除

文件搜索

find

  • Linux find 命令用于在指定目录下查找文件和目录,它可以使用不同的选项来过滤和限制查找的结果。
bash 复制代码
命令格式:
find [path] [expression]

expression:是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等,可以使用的选项非常多,这里我举一些常见的示例:
-name pattern:按文件名查找,支持使用通配符 * 和 ?
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等
-user username:按文件所有者查找
-group groupname:按文件所属组查找
-amin n:查找在 n 分钟内被访问过的文件
-atime n:查找在 n*24 小时内被访问过的文件
-mmin n:查找在 n 分钟内被修改过的文件
-mtime n:查找在 n*24 小时内被修改过的文件

// 查询当前目前及其子目录中下名为 log.txt 的文件
find . -name log.txt

// 将当前目录及其子目录中的所有文件列出
# find . -type f

// 查找 /home 目录下大于 1MB 的文件
find /home -size +1M

最后

  • 如果文章对你有帮助,请一键三连,关注、点赞、收藏,你的支持是我创作的最大动力,谢谢大家。

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

相关推荐
大树8811 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush412 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52012 小时前
Linux 11 动态监控指令top
linux
Inhand陈工13 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智13 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩13 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_13 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈13 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix