linux 三剑客命令(grep,sed ,awk)

本文详细介绍了 Linux 下的三个强大文本处理工具:grep、sed 和 awk 的使用方法及示例。包括如何搜索文本、替换数据以及复杂的字段处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

grep 命令 :强大的文本’搜索’工具

   1.grep   -n   'word'  file_name
在file_name文件中找到word所在的所有行并显示。-n 为显示行号。

这里写图片描述

    2.grep   'w[ea]ll'   file_name
在file_name文件中找到wall 或者是well 所在的所有行并显示

这里写图片描述

    3.grep    'w[^e]ll'   file_name
在file_name文件中找到”非well” 所在的所有行并显示

这里写图片描述

    4.grep   '^The'   file_name 
在file_name文件中找到以The开头的所有行并显示(请与上一条命令进行区别)

这里写图片描述

    5. grep       'goo..le'      file_name
在file_name文件中找到goo(任意字符)(任意字符)le的所有行并显示(即总共七个字符)

这里写图片描述

   6.grep    'g*g'     file_name
在file_name文件中找到g , gg , ggg等的所有行并显示(*代表重复前一个字符0~~无穷多次)

这里写图片描述

  7.grep   'Ty\{2,3\}'    file_name 
在file_name文件中找到Tyy,Tyyy的所有行并显示(注意{}在 shell中有特殊含义,故需要转义)

这里写图片描述

注意 : grep可以使用grep –color=always 来使得所查找的字符拥有特殊颜色,然后在执行source ~/.bashrc 来使得设置立即生效。

sed :实现数据的替换,删除,增加,选取等(以行为单位进行处理)

  1.sed    '2,4d'    file_name
删除file_name文件的2到4行
 2.sed  '2a liu .....\
 >shengxi is shuai !!!'  file_name 
在第二行下新增这样两行

这里写图片描述

3.sed   '2,4c    ni han ma   a !!!'    file_name 
把file_name文件的2到4行,替换为ni han ma a !!
4.sed   '2,5p' -n  file_name
把file_name文件的2到5行打印出来(不用-n 参数,就会重复输出2到5行)
5.sed  -i  's/a\[t\]\./p_temp->/g'     file_name 
把file_name文件中的a[t]. 全部替换为p_temp-> (-i 会直接将修改写入文件,[ ] 和 . 是特殊符号,需要用\来转义一下)

awk : 以字段为单位进行处理(其实就是把一行的数据分割,然后进行处理)

先介绍一些关于awk的用法:

 1.$0   代表一整行的数据
 2.$1   代表第一个字段,用人的话来说就是第一列的数据
 3.$2   以此类推
 4.NF   每一行拥有的字段总数
 5.NR   目前处理的是第几行的数据
 6.FS   目前的分隔字符
 7.命令格式 :awk   '条件{命令1} 条件{命令2}...'   file_name

具体命令:

    1. awk      'NR<6{print   $1  "\t"  $2 }'     file_name  
把file_name 文件中的前五行的第一列,第二列的数据列出来 (以[tab]或空格键分隔)

这是test 文件

这里写图片描述

  2.awk   '{print "该行数据为" $0 "\t" "该行的字段总数为"  NF   "\t"  "目前这是第几行"  NR}'   file_name

这里写图片描述

   3.  awk      'BEGIN{FS=":"}  $3<10{print $1 "\t" $3}'     /etc/passwd 
把/etc/passwd文件的第一列与第三列列出来(BEGIN可以让我们自己设置的分隔字符立即生效)
/etc/passwd 文件中第一列是帐户,第三列是UID(就是用户ID)。该文件以 : 号分隔,一行代表一个用户,记录关于用户的各种信息。

这里写图片描述

特殊说明:

 1.print 默认带有换行符,printf 没有 

这里写图片描述

  2.像\n ,\t,这种符号应该用双引号括起来 
  3.NR,NF等变量要用大写,并且不需要 $ 

三剑客命令总结:

-记住三个命令的运用形式
     grep    '字符'       文件
     sed     '命令'       文件
     awk    '条件{命令}'   文件
-死记一点,单引号内就是正则表达式的用法

重复一遍:单引号内一定是正则表达式,一定,一定!!!

最后附上一个查询命令的链接地址:查命令

下一篇将贴一个我写的入门式脚本,仅供娱乐!
<think>嗯,用户想了解Linux下的文本处理三剑客awksedgrep的使用方法。我需要先回忆这三个工具的基本功能和常见用例。首先,grep主要用于搜索文本,sed用于流编辑,而awk则更擅长处理结构化文本和生成报告。 用户可能已经知道这三个工具的大致用途,但需要具体的教程和示例。我应该从每个工具的基本语法开始,然后给出常见的使用场景和例子。比如,grep可以用来查找包含特定模式的行,sed可以替换文本,awk可以处理列数据。 还要注意用户提到的引用内容,引用1中提到了三者的区别,引用2和3是关于awk的具体例子。需要确保回答中包含这些引用中的信息,但不要直接复制,而是自然地融入进去。例如,在讲awk的时候,可以提到BEGIN块的使用,如引用3中的例子。 用户可能需要的是实用、简明的教程,所以每个部分都应该分点说明,比如基本语法、常用参数、典型应用场景,并附上示例代码。同时,生成相关问题时,要考虑用户可能的进一步需求,比如性能优化、复杂用法或组合使用这三个工具的技巧。 还需要检查是否遵循了系统级指令,比如数学公式的格式是否正确,中文回答,结构清晰。另外,确保引用的标识正确添加,比如在提到grep适合查找文本时,加上引用[^1]。 可能用户在实际使用中会遇到的问题,比如如何组合这三个命令,或者如何处理大型日志文件,这些可以作为相关问题提出。同时,要确保回答中的命令示例正确,比如awk脚本的编写和执行,如引用2中的例子。 最后,总结部分要简明扼要,强调三者的结合使用能提高效率,并引导用户参考手册深入学习。检查是否有遗漏的重要知识点,比如正则表达式在三个工具中的应用,或者sed的多行处理能力等。</think>### Linux文本处理三剑客使用教程 #### 一、grep:文本搜索工具 **核心功能**:通过正则表达式在文件中搜索指定模式,返回匹配行[^1]。 1. **基本语法**: ```bash grep [选项] 模式 文件名 ``` 2. **常用参数**: - `-i`:忽略大小写 - `-v`:反向匹配(显示不包含模式的行) - `-r`:递归搜索目录 - `-n`:显示行号 3. **典型应用**: ```bash # 查找包含"error"的日志行(带行号) grep -n "error" /var/log/syslog # 统计包含"GET"请求的nginx日志数量 grep -c "GET" access.log # 递归搜索目录中所有Python文件的TODO标记 grep -r --include="*.py" "TODO" ~/projects/ ``` #### 二、sed:流编辑器 **核心功能**:通过脚本指令对文本进行非交互式编辑[^1]。 1. **基本语法**: ```bash sed [选项] '脚本命令' 文件名 ``` 2. **常用操作**: ```bash # 替换文本(全局替换) sed 's/old/new/g' file.txt # 删除空白行 sed '/^$/d' file.txt # 仅处理第5-10行并替换 sed '5,10s/foo/bar/' file.txt ``` 3. **高级应用**: ```bash # 原地编辑文件(-i参数) sed -i.bak 's/原字符串/新字符串/' config.conf # 多命令组合(-e参数) sed -e 's/foo/bar/' -e '/^#/d' script.py ``` #### 三、awk:文本分析工具 **核心功能**:基于字段处理结构化文本,支持编程逻辑[^1][^2]。 1. **基本结构**: ```bash awk 'BEGIN{预处理} 模式{动作} END{后处理}' 文件名 ``` 2. **字段处理**: ```bash # 显示/etc/passwd第1和第3列(以冒号分隔) awk -F: '{print $1, $3}' /etc/passwd # 统计文件行数 awk 'END{print NR}' data.txt ``` 3. **条件判断**: ```bash # 筛选第三列大于1000的用户(如引用[2]示例) awk -F: '$3 >= 1000 {print $1}' /etc/passwd # 计算CSV文件第二列总和 awk -F, '{sum+=$2} END{print sum}' data.csv ``` 4. **脚本文件**: ```awk #!/bin/awk -f BEGIN {FS=":"; print "用户分析报告"} $3 >= 1000 {print "普通用户:", $1} END {print "----结束----"} ``` #### 四、组合应用案例 ```bash # 分析nginx日志:统计不同状态码出现次数 awk '{print $9}' access.log | sort | uniq -c | grep -E '200|404|500' # 批量修改配置文件:注释掉所有包含"debug"的行 sed -i '/debug/s/^/#/' *.conf # 提取特定时间段的日志(2023-10-01 14:00-15:00) grep "2023-10-01 1[4-5]:" app.log | awk '/14:30:00/,/15:00:00/' ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值