grep
是一个强大的命令行工具,用于在文件或文本中搜索指定的字符串或正则表达式。- 基本语法
#搜索模式:可以是普通字符串,也可以是正则表达式。
#文件:指定要搜索的文件,可以是一个或多个文件,也可以通过管道输入。
grep [选项] "搜索模式" 文件
常用选项
选项 | 描述 |
---|
-i | 忽略大小写匹配。 |
-v | 反向匹配,显示未匹配的行。 |
-c | 仅输出匹配的行数。 |
-n | 显示匹配行的行号。 |
-l | 仅列出包含匹配内容的文件名。 |
-o | 仅显示匹配的部分,而非整行。 |
-r | 递归搜索 |
-w | 完全匹配 |
-e | 指定正则表达式 |
示例
- 显示
file.txt
中包含 "hello" 的所有行:
grep "hello" file.txt
- 显示目录
/path/to/directory
中所有包含 "hello" 的文件及其匹配内容:
grep -r "hello" /path/to/directory
- 匹配 "error" 或 "ERROR" 等大小写不同的文本:
grep -i "error" log.txt
- 显示匹配 "pattern" 的行及其对应的行号:
grep -n "pattern" file.txt
- 列出当前目录下所有包含 "keyword" 的文件名:
grep -l "keyword" *.txt
- 显示匹配 "important" 的行及其前后 2 行内容:
grep -C 2 "important" document.txt
awk
是一个功能强大的文本处理工具,用于在文件或文本流中对数据进行格式化、过滤和分析操作。它支持基于模式的匹配和操作,适用于日志分析、数据提取和简单的脚本编写。- 基本语法
#模式:用于匹配输入数据的条件(可选)。
#动作:对匹配到的数据执行的操作(可选)。
#如果省略 模式,默认匹配所有行。
#如果省略 动作,默认打印匹配的行。
awk '模式 { 动作 }' 文件
常用选项
选项 | 描述 |
---|
-F | 指定输入字段分隔符(默认是空格或制表符)。 |
-v | var=value 定义变量并传递给 awk。 |
BEGIN | 在处理数据前执行的动作(如初始化)。 |
END | 在所有数据处理完成后执行的动作。 |
条件表达式 | 如 $1 > 100,匹配第一个字段大于 100 的行。 |
常用内置变量
变量 | 描述 |
---|
$0 | 当前行的内容。 |
$1 ... | 当前行的第 1 个、第 2 个字段,以此类推。 |
NR | 当前行号(Number of Record)。 |
NF | 当前行的字段数(Number of Fields)。 |
FS | 输入字段分隔符(Field Separator)。 |
OFS | 输出字段分隔符(Output Field Separator)。 |
示例
awk '{ print $0 }' file.txt
awk '{ print $1, $3 }' file.txt
awk -F "," '{ print $2 }' data.csv
awk '$1 > 50 { print $0 }' file.txt
awk '/error/ { print $0 }' log.txt
awk '{ print $0, "字段数:", NF }' file.txt
awk 'END { print "总行数:", NR }' file.txt
awk 'END { print "总行数:", NR }' file.txt
- 在文件处理前打印 "处理开始",逐行打印第 1 个字段,最后打印 "处理结束":
awk 'BEGIN { print "处理开始" } { print $1 } END { print "处理结束" }' file.txt
awk -v threshold=100 '$1 > threshold { print $0 }' file.txt
awk '{ sum += $1 } END { print "总和:", sum }' file.txt
sed
(Stream Editor)是一个强大的流编辑器,用于对文本进行批量处理。它支持查找替换、删除、插入等多种文本操作,适用于处理文件或标准输入中的文本流。- 基本语法
#脚本命令:指定对文本进行操作的规则,如替换或删除。
#文件:要处理的文件,也可以通过管道传入数据。
sed [选项] '脚本命令' 文件
基本选项
选项 | 描述 |
---|
-n | 禁止自动输出,只有指定的行会被显示。 |
-e | 允许在命令行中添加多个脚本命令。 |
-i | 直接修改原文件(就地编辑)。 |
-f | 从文件加载脚本命令。 |
常用命令
命令 | 描述 |
---|
s/old/new/ | 替换操作,将 old 替换为 new。 |
d | 删除匹配的行。 |
p | 打印匹配的行(与 -n 一起使用)。 |
a\text | 在当前行后追加文本 text。 |
i\text | 在当前行前插入文本 text。 |
c\text | 替换匹配行的内容为 text。 |
q | 提前退出,停止处理后续行。 |
示例
- 将 file.txt 中的第一处 old 替换为 new:
sed 's/old/new/g' file.txt
sed '2d' file.txt
- 在第 3 行后插入文本 This is a new line:
sed '3a\This is a new line' file.txt`
- 在第 3 行前插入文本 This is an inserted line:
sed '3i\This is an inserted line' file.txt
- 将第 2 行的内容替换为 This is the new content:
sed '2c\This is the new content' file.txt
sed -n '/pattern/p' file.txt
sed '1d; s/foo/bar/' file.txt
- 直接修改 file.txt,将所有 old 替换为 new:
sed -i 's/old/new/g' file.txt
sed '2,4d' file.txt
- 将 script.sed 中的命令应用于 file.txt:
sed -f script.sed file.txt