Linux三剑客使用方式

一.awk

awk 是一种强大的文本处理工具,在 Linux 系统中被广泛使用。它的基本语法如下:

awk 'pattern { action }' filename

其中,pattern 是匹配条件,而 action 是对匹配行执行的操作。以下是一些常见的 awk 使用方式:

1. 打印文本:

# 打印文件的第一列
awk '{print $1}' filename

2. 条件匹配:

# 打印包含关键字 "pattern" 的行
awk '/pattern/ {print}' filename

# 打印第一列包含 "keyword" 的行
awk '$1 ~ /keyword/ {print}' filename

3. 数学运算:

# 计算文件中第二列的总和
awk '{sum += $2} END {print sum}' filename

4. 字段分隔符:

# 使用逗号作为字段分隔符,打印第二列
awk -F',' '{print $2}' filename

5. 多个操作:

# 打印第一列包含 "error" 的行,并计算第二列的总和
awk '/error/ {print; sum += $2} END {print "Total:", sum}' filename

6. 自定义输出格式:

# 使用自定义输出格式打印第一列和第三列
awk '{printf "Column 1: %s, Column 3: %s\n", $1, $3}' filename

7. 多文件处理:

# 处理多个文件
awk '{print FILENAME, $0}' file1.txt file2.txt

8. 使用脚本文件:

awk 命令放入脚本文件中,例如 myscript.awk

# myscript.awk
/pattern/ {print}

然后运行:

awk -f myscript.awk filename

9. 使用条件语句:

# 如果第一列大于 10,则打印整行
awk '$1 > 10 {print}' filename

10. 文本替换:

# 替换每行中的 "old" 为 "new"
awk '{gsub(/old/, "new"); print}' filename

11. 指定字段范围:

# 打印第二到第四列
awk '{print $2, $3, $4}' filename

12. 使用函数:

# 使用 length 函数打印每行的字符数
awk '{print "Length:", length}' filename

13. 字段间的计算:

# 计算每行第二列和第三列的和
awk '{sum = $2 + $3; print "Sum:", sum}' filename

14. 处理列头:

# 跳过第一行(列头),打印剩余行
awk 'NR > 1 {print}' filename

15. 逻辑运算:

# 打印第一列大于 5 且第二列小于 10 的行
awk '$1 > 5 && $2 < 10 {print}' filename

16. 使用 BEGIN 和 END:

# 在处理开始前和结束后执行操作
awk 'BEGIN {print "Processing starts"} {print} END {print "Processing ends"}' filename

17. 分组统计:

# 按照第一列分组统计数量
awk '{count[$1]++} END {for (item in count) print item, count[item]}' filename

18. 自定义字段输出分隔符:

# 使用 ";" 作为输出字段分隔符,打印第一列和第二列
awk -v OFS=';' '{print $1, $2}' filename

19. 使用 AWK 脚本文件:

awk 命令放入脚本文件中,例如 myscript.awk

# myscript.awk
{
  if ($1 > 10) {
    print "Column 1 is greater than 10:", $1
  } else {
    print "Column 1 is not greater than 10:", $1
  }
}

然后运行:

awk -f myscript.awk filename

20. 排序和去重:

# 根据第一列排序并去重
awk '!seen[$1]++' filename | sort -k1

21. 计算平均值:

# 计算第二列的平均值
awk '{sum += $2} END {print "Average:", sum/NR}' filename

22. 输出特定行数:

# 打印前 5 行
awk 'NR <= 5' filename

23. 执行系统命令:

# 执行系统命令并获取输出
awk '{cmd = "echo " $1 "| wc -c"; cmd | getline result; close(cmd); print result}' filename

24. 处理 CSV 文件:

# 处理逗号分隔的文件,打印第一列和第三列
awk -F',' '{print $1, $3}' filename.csv

25. 使用正则表达式:

# 打印包含数字的行
awk '/[0-9]/ {print}' filename

二.grep

grep 是一个在 Linux 和其他类 Unix 系统中用于搜索文本的强大命令。它的基本语法如下:

grep [options] pattern [files]

其中,pattern 是你要搜索的模式,而 [files] 是你要搜索的文件。以下是一些常见的 grep 使用方式:

1. 基本搜索:

# 在文件中搜索包含 "pattern" 的行
grep "pattern" filename

2. 忽略大小写:

# 在文件中搜索包含 "pattern" 的行,忽略大小写
grep -i "pattern" filename

3. 显示匹配行数:

# 在文件中搜索包含 "pattern" 的行,并显示匹配行的行数
grep -c "pattern" filename

4. 显示非匹配行数:

# 在文件中搜索不包含 "pattern" 的行,并显示非匹配行的行数
grep -vc "pattern" filename

5. 显示匹配行的行号:

# 在文件中搜索包含 "pattern" 的行,并显示匹配行的行号
grep -n "pattern" filename

6. 显示不匹配的行号:

# 在文件中搜索不包含 "pattern" 的行,并显示不匹配行的行号
grep -vn "pattern" filename

7. 递归搜索目录:

# 递归搜索目录中包含 "pattern" 的文件
grep -r "pattern" directory

8. 显示匹配内容:

# 在文件中搜索包含 "pattern" 的行,并显示匹配的内容
grep -o "pattern" filename

9. 显示行数:

# 在文件中搜索包含 "pattern" 的行,并显示匹配行的行数
grep -c "pattern" filename

10. 显示行数和文件名:

# 在多个文件中搜索包含 "pattern" 的行,并显示匹配行的行数和文件名
grep -H -c "pattern" file1 file2

11. 反向匹配:

# 在文件中搜索不包含 "pattern" 的行
grep -v "pattern" filename

12. 使用正则表达式:

# 在文件中使用正则表达式搜索
grep -E "[0-9]+" filename

13. 显示匹配行之前/之后的内容:

# 在文件中搜索包含 "pattern" 的行,并显示匹配行之前的 2 行
grep -B 2 "pattern" filename

# 在文件中搜索包含 "pattern" 的行,并显示匹配行之后的 2 行
grep -A 2 "pattern" filename

14. 显示匹配行之前和之后的内容:

# 在文件中搜索包含 "pattern" 的行,并显示匹配行之前和之后的 2 行
grep -C 2 "pattern" filename

15. 使用多个模式:

# 在文件中搜索同时包含 "pattern1" 和 "pattern2" 的行
grep -e "pattern1" -e "pattern2" filename

16. 仅显示匹配内容而不显示整行:

# 仅显示包含 "pattern" 的部分内容,而不是整行
echo "some text with pattern and more" | grep -o "pattern"

17. 搜索并排除特定文件:

# 在所有文件中搜索 "pattern",但排除以 ".log" 结尾的文件
grep "pattern" --exclude="*.log" *

18. 列出匹配的文件名:

# 列出包含 "pattern" 的文件名
grep -l "pattern" *

19. 显示匹配的行数及其内容:

# 显示匹配 "pattern" 的行数及其内容
grep -n "pattern" filename

20. 显示行数并忽略二进制文件:

# 在文件中搜索包含 "pattern" 的行,并显示匹配行的行数,但忽略二进制文件
grep -n "pattern" filename --text

21. 递归搜索目录并显示匹配的文件名:

# 递归搜索目录中包含 "pattern" 的文件,并显示匹配的文件名
grep -r -l "pattern" directory

22. 显示匹配的行数及其上下文:

# 显示包含 "pattern" 的行数及其上下文
grep -C 2 "pattern" filename

23. 显示文件中所有不匹配的行:

# 显示文件中所有不包含 "pattern" 的行
grep -v "pattern" filename

24. 显示文件中所有匹配的行,并显示匹配内容所在的字符位置:

# 显示文件中所有包含 "pattern" 的行,及其在行中的字符位置
grep -o -b "pattern" filename

25. 使用过滤条件进行搜索:

# 通过管道将命令的输出传递给 grep 进行搜索
ls -l | grep "pattern"

三.sed

sed(Stream Editor)是一个在 Linux 和类 Unix 系统中用于文本处理的流编辑器。它以行为单位处理文本,可以执行替换、删除、添加等操作。以下是一些常见的 sed 使用方式:

1. 文本替换:

# 将文件中所有的 "old" 替换为 "new"
sed 's/old/new/g' filename

2. 只替换第一个匹配:

# 只替换每行的第一个 "old"
sed 's/old/new/' filename

3. 替换特定行:

# 替换第三行的 "old" 为 "new"
sed '3s/old/new/' filename

4. 删除匹配行:

# 删除包含 "pattern" 的行
sed '/pattern/d' filename

5. 删除空白行:

# 删除空白行
sed '/^$/d' filename

6. 插入行:

# 在匹配行后插入新行
sed '/pattern/a\New line' filename

7. 在行首添加内容:

# 在每行前添加 "prefix"
sed 's/^/prefix/' filename

8. 在行尾添加内容:

# 在每行末尾添加 "suffix"
sed 's/$/suffix/' filename

9. 使用正则表达式替换:

# 使用正则表达式替换
sed 's/[0-9]\+/NUM/' filename

10. 删除行首空格:

# 删除每行的行首空格
sed 's/^ *//' filename

11. 删除行尾空格:

# 删除每行的行尾空格
sed 's/ *$//' filename

12. 删除多个空白:

# 删除多个连续的空白,只保留一个空白
sed 's/ \+/ /g' filename

13. 替换并保存到新文件:

# 将替换结果保存到新文件
sed 's/old/new/g' filename > newfile

14. 在文件中插入内容:

# 在文件开头插入新行
sed '1i\New line' filename

15. 在文件结尾插入内容:

# 在文件结尾插入新行
sed '$a\End of file' filename

16. 替换指定范围内的内容:

# 在 2-5 行替换 "old" 为 "new"
sed '2,5s/old/new/g' filename

17. 打印指定行:

# 打印第三行
sed -n '3p' filename

18. 打印指定范围的行:

# 打印 3-6 行
sed -n '3,6p' filename

19. 删除指定范围的行:

# 删除 4-7 行
sed '4,7d' filename

20. 使用变量:

# 使用变量进行替换
variable="new"
sed "s/old/$variable/g" filename

四.结合使用场景

结合使用 awk, grep, 和 sed 可以构建强大的文本处理管道,适用于各种场景。以下是一些示例场景:

场景一:提取日志中的关键信息

假设有一个日志文件 logfile.txt,其中包含了很多信息,但你只关心包含关键字 "error" 的行,并希望提取出其中的时间戳和错误描述。

grep "error" logfile.txt | awk '{print $1, $2, $NF}' | sed 's/,//'

这个命令首先使用 grep 筛选出包含 "error" 的行,然后通过 awk 提取出时间戳和最后一个字段(假设错误描述在最后一个字段),最后通过 sed 去除可能存在的逗号。

场景二:过滤和格式化日志信息

假设有一个日志文件 app.log,其中包含了各种信息,你想要提取出包含 "ERROR" 的行,并格式化输出错误的时间戳和错误信息。

grep "ERROR" app.log | awk '{print $1, $2, $NF}' | sed 's/,//'

这个命令使用 grep 筛选出包含 "ERROR" 的行,然后通过 awk 提取出时间戳和最后一个字段,最后通过 sed 去除可能存在的逗号。

场景三:从文本中提取特定信息

假设有一个文本文件 info.txt,其中包含了各种信息,你想要提取包含关键字 "Version" 的行,并输出版本号。

grep "Version" info.txt | awk '{print $NF}'

这个命令使用 grep 筛选出包含 "Version" 的行,然后通过 awk 提取出该行的最后一个字段,即版本号。

场景四:筛选包含特定模式的行并添加标签

假设有一个文件 data.txt,你希望筛选出包含 "important" 的行,并在这些行前面添加标签 "Important: "。

grep "important" data.txt | sed 's/^/Important: /'

这个命令使用 grep 筛选出包含 "important" 的行,然后通过 sed 在每行前面添加 "Important: " 标签。

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值