自学内容网 自学内容网

linux文本处理三剑客grep,sed,awk的常用用法

1. grep命令

grep 命令在 Linux 系统中是文本搜索的利器,它基于正则表达式进行匹配,能够高效地筛选出包含指定模式的文本行。以下是 grep 命令的一些常用用法和示例:

基本用法

grep '模式' 文件名
  • 模式:可以是简单的文本字符串,也可以是复杂的正则表达式。
  • 文件名:指定要搜索的文件。如果省略文件名,grep 会从标准输入读取数据。
#1. 查找包含指定字符串的行
grep "hello" example.txt

#2. 递归搜索目录中的所有文件
grep -r "pattern" directory

#递归搜索当前目录及其子目录中包含字符串 "hello" 的所有文件:
grep -r "hello" .

#3. 显示文件 example.txt 中包含字符串 "hello" 的行及其行号:
grep -n "hello" example.txt

#4. 忽略大小写查找文件 example.txt 中包含字符串 "hello" 的所有行:
grep -i "hello" example.txt

#5. 显示文件 example.txt 中不包含字符串 "hello" 的所有行:
grep -v "hello" example.txt

#6. 显示包含字符串 "hello" 的文件名:
grep -l "hello" *.txt

#7. 显示不包含字符串 "hello" 的文件名:
grep -L "hello" *.txt

#8.使用正则表达式:查找文件 example.txt 中以 "hello" 开头的行:
grep "^hello" example.txt

#9. 多模式匹配:查找文件 example.txt 中包含 "hello" 或 "world" 的行:
grep -e "hello" -e "world" example.txt

#10. 通过管道符搜索 command | grep -n "parrent"
ls -l |grep "test"

2. sed命令

sed(Stream Editor)是一个强大的文本处理工具,常用于在 Linux 和 Unix 系统中进行流编辑。它可以用来替换文本、删除行、插入文本等。以下是 sed 命令的一些常用用法和示例:

基本语法

sed [选项] '脚本' 文件名


常用选项

  • -e script 或 --expression=script:添加 script 到要执行的命令中。
  • -f script-file 或 --file=script-file:从 script-file 中读取 sed 脚本。
  • -i[SUFFIX] 或 --in-place[=SUFFIX]:直接修改文件内容,而不是输出到标准输出。可选地备份文件,使用 SUFFIX 作为备份文件的扩展名。
  • -n 或 --quiet 或 --silent:仅显示那些被 p 命令处理的行。

常用脚本命令

  • s/pattern/replacement/flags:替换操作。
    • pattern:被替换的模式。
    • replacement:替换后的文本。
    • flags:标志,如 g 表示全局替换,p 表示打印替换的行。
  • d:删除行。
  • p:打印行。
  • a\text:在匹配行后追加 text
  • i\text:在匹配行前插入 text
  • c\text:用 text 替换匹配的行。
#1. 将 file.txt 中每行的第一个 foo 替换为 bar。
sed 's/foo/bar/' file.txt

#2. 将 file.txt 中所有的 foo 替换为 bar。
sed 's/foo/bar/g' file.txt

#3. 将文件 example.txt 中第 5 行的 "apple" 替换为 "orange":
sed 'line-number s/old-text/new-text/' filename
sed '5 s/apple/orange/' example.txt

#4. 将文件 example.txt 中第 3 到第 7 行的 "apple" 替换为 "orange":
sed 'start-line,end-line s/old-text/new-text/' filename
sed '3,7 s/apple/orange/' example.txt

#5. 删除指定行:删除文件 example.txt 中的第 5 行:
sed 'line-number d' filename
sed '5d' example.txt

#6. 删除范围内的行:删除文件 example.txt 中第 3 到第 7 行:
sed 'start-line,end-line d' filename
sed '3,7d' example.txt

#7. 删除匹配的行:删除文件 example.txt 中包含 "apple" 的所有行:
sed '/pattern/d' filename
sed '/apple/d' example.txt

#8. 在指定行前插入文本:在文件 example.txt 的第 5 行前插入 "This is a new line.":
sed 'line-number i\new-text' filename
sed '5 i\This is a new line.' example.txt

#9. 在指定行后追加文本:在文件 example.txt 的第 5 行后追加 "This is a new line.":
sed 'line-number a\new-text' filename
sed '5 a\This is a new line.' example.txt

#10. 直接修改原文件:直接在文件 example.txt 中将所有的 "apple" 替换为 "orange":
sed -i 's/old-text/new-text/' filename
sed -i 's/apple/orange/g' example.txt

3. awk命令

awk 是一个强大的文本处理工具,在 Linux 和 Unix 系统中广泛使用。它特别适用于模式扫描和处理语言,可以用于从文件中提取和转换数据。以下是一些基本的 awk 用法示例和解释:

基本语法

awk 'pattern { action }' input-file
  • pattern:用于匹配输入行。可以是正则表达式、条件表达式或空(表示匹配所有行)。
  • action:在匹配 pattern 的行上执行的命令块。通常被花括号 {} 包围。
  • input-file:要处理的输入文件。
#1. 打印文件中的所有行:
awk '{print}' example.txt

#2. 打印文件中的特定行:打印文件 example.txt 中的第 5 行:
awk 'NR == line_number {print}' filename
awk 'NR == 5 {print}' example.txt

#3. 打印文件中的特定行范围:打印文件 example.txt 中第 3 到第 7 行:
awk 'NR >= start_line && NR <= end_line {print}' filename
awk 'NR >= 3 && NR <= 7 {print}' example.txt

#4. 打印文件中的特定列:打印文件 example.txt 中的第二列:
awk '{print $column_number}' filename
awk '{print $2}' example.txt

#5. 根据条件过滤行:打印文件 example.txt 中包含 "apple" 的所有行:
awk '/pattern/ {print}' filename
awk '/apple/ {print}' example.txt

#6. 使用多个条件:打印文件 example.txt 中第一列等于 "apple" 且第二列大于 10 的行:
awk 'condition1 && condition2 {print}' filename
awk '$1 == "apple" && $2 > 10 {print}' example.txt

#7. 指定字段分隔符:
awk -F 'delimiter' '{print $column_number}' filename
awk -F ',' '{print $3}' example.csv

#8. 计算和统计 计算文件 example.txt 中第二列的总和:
awk '{sum += $column_number} END {print sum}' filename
awk '{sum += $2} END {print sum}' example.txt

#9. 计算平均值:计算文件 example.txt 中第二列的平均值:
awk '{sum += $column_number; count++} END {print sum / count}' filename
awk '{sum += $2; count++} END {print sum / count}' example.txt

#10. 统计行数 统计文件 example.txt 的行数:
awk 'END {print NR}' filename
awk 'END {print NR}' example.txt

#11. 格式化输出:格式化输出文件 example.txt 中的前两列:
awk '{printf format_string}' filename
awk '{printf "%-10s %-10s\n", $1, $2}' example.txt


原文地址:https://blog.csdn.net/s00229295/article/details/143792704

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!