I'm Aron

Linux文本处理基础

1213 字
6 分钟
Linux文本处理基础

查看完整文件:cat#

cat 会把文件内容直接输出到终端。

Terminal window
cat 文件

常用选项:

选项作用
-n显示所有行行号
-b只给非空行编号
-s将连续空行压缩为一行

示例:

Terminal window
cat -n nginx.conf

cat 适合查看内容不长的文件。如果文件很大,建议使用 lessmoreheadtail

分页查看:more 和 less#

more 可以分页查看文件。

Terminal window
more 文件

常用操作:

按键作用
空格下一页
回车下一行
b上一页
q退出

less 功能更强,也更常用:

Terminal window
less 文件

常用操作:

按键作用
空格下一页
b上一页
/关键字搜索关键字
n下一个匹配
N上一个匹配
q退出

查看日志或配置文件时,lesscat 更稳,因为它不会一次性刷满终端。

查看文件开头和结尾:head、tail#

查看文件前几行:

Terminal window
head 文件
head -n 20 文件

查看文件最后几行:

Terminal window
tail 文件
tail -n 50 文件

持续跟踪文件变化:

Terminal window
tail -f app.log

tail -f 是看实时日志的常用命令。退出时按 Ctrl+C

搜索文件内容:grep#

grep 用来按关键字过滤文本。

Terminal window
grep [选项] 关键字 文件

常用选项:

选项作用
-n显示匹配行号
-v反向匹配,显示不包含关键字的行
-i忽略大小写
-r递归搜索目录

示例:

Terminal window
grep -n "error" app.log
grep -i "failed" app.log
grep -v "#" nginx.conf
grep -r "server_name" /etc/nginx

一些常用匹配:

Terminal window
grep "^root" /etc/passwd
grep "bash$" /etc/passwd
grep "^$" file.txt

含义分别是:匹配以 root 开头的行、匹配以 bash 结尾的行、匹配空行。

查找文件:find#

find 用来在目录中查找文件或目录。

Terminal window
find 路径 条件

按名称查找:

Terminal window
find /etc -name "*.conf"

按类型查找:

Terminal window
find /var/log -type f
find /home -type d

按大小查找:

Terminal window
find /var/log -type f -size +100M

常见类型:

类型含义
f普通文件
d目录

find 的搜索范围越大,耗时越长。实际使用时最好先限定目录,比如从 /var/log/etc、项目目录开始。

统计文本:wc#

wc 用来统计文件内容。

Terminal window
wc [选项] 文件

常用选项:

选项作用
-l统计行数
-w统计单词数
-c统计字节数
-m统计字符数

示例:

Terminal window
wc -l app.log
wc -w article.md

配合管道可以统计搜索结果:

Terminal window
grep "ERROR" app.log | wc -l

这表示统计日志中包含 ERROR 的行数。

管道符:|#

管道符 | 的作用是把左边命令的输出,作为右边命令的输入。

Terminal window
命令1 | 命令2

示例:

Terminal window
cat app.log | grep "ERROR"
ps -ef | grep nginx
find /etc -name "*.conf" | wc -l

管道可以连续使用:

Terminal window
cat app.log | grep "ERROR" | grep "timeout"

这表示先找出包含 ERROR 的日志,再从结果中找出包含 timeout 的行。

输出和重定向:echo、>、>>#

echo 用来输出内容:

Terminal window
echo "hello linux"

使用 > 可以覆盖写入文件:

Terminal window
echo "hello" > a.txt

使用 >> 可以追加写入文件:

Terminal window
echo "world" >> a.txt

错误输出可以使用 2> 重定向:

Terminal window
ls /not-exist 2> error.log

注意:> 会覆盖文件原内容,写配置或日志时要确认是否真的需要覆盖。

反引号和命令替换#

被反引号包围的内容会作为命令执行:

Terminal window
echo `pwd`

输出当前工作目录。

现代 Shell 中更推荐使用 $(),可读性更好:

Terminal window
echo "$(pwd)"

例如创建带日期的备份文件:

Terminal window
cp app.log "app-$(date +%Y%m%d).log"

vim 编辑器入门#

vim 是 Linux 中非常常见的文本编辑器。它至少要理解三种模式:

模式作用
命令模式默认模式,用来移动、复制、删除
输入模式输入文本
末行模式保存、退出、替换、设置行号

从命令模式进入输入模式:

按键作用
i在光标前插入
a在光标后插入
o在下一行插入新行

命令模式常用操作:

按键作用
G跳到最后一行
50gg跳到第 50 行
10dd删除 10 行
10yy复制 10 行
p粘贴

末行模式常用操作:

:set nu
:set nonu
:w
:q
:wq
:q!

含义分别是显示行号、取消行号、保存、退出、保存并退出、强制退出不保存。

文本替换:

:s/old/new
:s/old/new/g
:%s/old/new/g

含义分别是替换当前行第一个匹配、替换当前行所有匹配、替换全文所有匹配。

本篇命令速查#

命令作用
cat -n 文件查看文件并显示行号
less 文件分页查看文件
head -n 20 文件查看前 20 行
tail -n 50 文件查看最后 50 行
tail -f 日志实时跟踪日志
grep -n 关键字 文件搜索关键字并显示行号
find 路径 -name 名称按名称查找
wc -l 文件统计行数
`命令1命令2`
echo 内容 > 文件覆盖写入
echo 内容 >> 文件追加写入
vim 文件编辑文件

评论区

文章目录