Linux基础及应用教程:文本三剑客之 grep

grep 是 Linux 文本处理三剑客之一,用于查找、过滤、正则匹配和日志分析,是运维工程师、文本处理人员必学工具。

一、实验目标

二、实验环境

三、实验内容与步骤

实验准备

创建实验目录并准备测试文本。

mkdir -p ~/grep_lab
cd ~/grep_lab

# simple.txt
cat > simple.txt << EOF
Hello World
hello world
HELLO WORLD
This is a grep test file.
Linux is powerful.
Text filtering with grep is easy.
EOF

# logs.txt
cat > logs.txt << EOF
2024-01-01 INFO User login success
2024-01-01 ERROR Cannot connect to database
2024-01-02 WARN  Disk space low
2024-01-03 ERROR File not found
2024-01-04 INFO  Task finished
EOF

# data.txt
cat > data.txt << EOF
apple
banana
orange
grape
pineapple
blueberry
blackberry
EOF

任务1:grep 基础搜索

最基本的查找文本中包含某字符串的行。

grep "hello" simple.txt
grep "INFO" logs.txt

任务2:忽略大小写 -i

grep -i "hello" simple.txt

任务3:行号与计数(-n / -c)

grep -n "ERROR" logs.txt
grep -c "ERROR" logs.txt

任务4:反向查找 -v

grep -v "INFO" logs.txt

任务5:整行匹配 -x

grep -x "apple" data.txt

任务6:正则表达式匹配

使用 grep -Eegrep 启用扩展正则。

# 开头匹配
grep "^2024" logs.txt

# 结尾匹配
grep "success$" logs.txt

# 任意字符
grep ".... error" simple.txt

# 字符集匹配
grep "b[a-z]nana" data.txt

# 扩展正则
grep -E "apple|banana" data.txt
grep -E "^(ERROR|WARN)" logs.txt

任务7:递归搜索目录 -r

mkdir -p nested/logs
cp logs.txt nested/logs/log1.txt
cp logs.txt nested/logs/log2.txt

grep -r "ERROR" nested/

任务8:高亮显示 --color

grep --color=auto "ERROR" logs.txt

任务9:结合管道使用

grep "ERROR" logs.txt | sort
grep "ERROR" logs.txt | grep -v "database"
grep "ERROR" logs.txt | wc -l

任务10:长度匹配练习

grep -E "^.{7,}$" data.txt

综合实操练习

找出:所有 ERROR 且日期为 2024-01-01 且不包含 database 的日志。

grep "2024-01-01" logs.txt \
  | grep "ERROR" \
  | grep -v "database"

四、实验报告要求

五、常见问题解答