【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编程。

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

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

相关推荐
轩辰~9 分钟前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
wanhengidc1 小时前
短视频运营行业该如何选择服务器?
运维·服务器
雨中rain1 小时前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
-KamMinG1 小时前
Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
运维·grafana
Bessssss1 小时前
centos日志管理,xiao整理
linux·运维·centos
s_yellowfish1 小时前
Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
linux·服务器·chatgpt
豆是浪个1 小时前
Linux(Centos 7.6)yum源配置
linux·运维·centos
vvw&1 小时前
如何在 Ubuntu 22.04 上安装 Ansible 教程
linux·运维·服务器·ubuntu·开源·ansible·devops
我一定会有钱1 小时前
【linux】NFS实验
linux·服务器
王铁柱子哟-1 小时前
解决 正在下载VS Code 服务器... 问题
运维·服务器