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 命令的一些常用用法和示例:

基本语法

bash 复制代码
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 替换匹配的行。
bash 复制代码
#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 用法示例和解释:

基本语法

bash 复制代码
awk 'pattern { action }' input-file
  • pattern:用于匹配输入行。可以是正则表达式、条件表达式或空(表示匹配所有行)。
  • action:在匹配 pattern 的行上执行的命令块。通常被花括号 {} 包围。
  • input-file:要处理的输入文件。
bash 复制代码
#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
相关推荐
Michaelwubo9 分钟前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客071314 分钟前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<15 分钟前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟16 分钟前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun39 分钟前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架1 小时前
邀请逻辑
java·linux·后端
LIKEYYLL2 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3213 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3213 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately3 小时前
centos单机部署seata
linux·运维·centos