前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux】【实战系列】10 分钟掌握日常开发中 Linux 文本与文件处理命令

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

原创
作者头像
Lorin 洛林
修改2024-01-23 18:38:54
1900
修改2024-01-23 18:38:54
举报
文章被收录于专栏:LinuxLinux
  • hello,大家好,我是 Lorin,今天和大家分享一期 Linux 命令实战教学,作为一个开发者熟悉并掌握常见的 Linux 命令可以说是基本功,这一期我将总结一些文本与文件处理的常见 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

head

  • 前面我们使用 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键可以返回到普通模式。

在命令模式下按下 :(英文冒号)就进入了底线命令模式。
vim-vi-workmodel.png
vim-vi-workmodel.png

使用

基本使用
  • 使用 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编程。

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

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

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文本查看和处理
    • cat
      • tail
        • head
          • more & less
            • more
            • less
          • grep
            • 组合融合技
          • awk
          • 文本编辑
            • vi & vim
              • 三种模式
              • 使用
          • 文件搜索
            • find
            • 最后
            • 个人简介
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档