首页 > 系统相关 >shell文本三剑客(grep、awk、sed)

shell文本三剑客(grep、awk、sed)

时间:2024-08-27 13:57:56浏览次数:7  
标签:shell 匹配 sed file grep txt 替换 三剑客

grepsedawk被称为Linux三剑客,是因为它们在文本处理和数据操作方面极其强大且常用。

Linux三剑客在文件处理中的作用:

  • grep(数据查找定位):文本搜索工具,在文件中搜索符合正则表达式的文本内容,并打印匹配的行。

  • awk(数据切片):文本处理工具,主要用于对结构化数据进行格式化和拆分处理,进行数据统计和报告生成;

  • sed(数据修改):流编辑器,对文本进行插入、删除、替换、提取等操作;

一、grep

grep是一个用于文本搜索的工具,可以在文件中搜索符合正则表达式的文本内容,并打印匹配的行。它简单、快速,是进行文本搜索和过滤的首选工具。

1.1 基本语法

grep [选项参数] pattern [file...]

参数说明:

1)pattern:过滤条件,可以是正则表达式;

2)file:要搜索的文件(一个或多个),若不指定文件,grep 会从标准输入读取。

1.2 grep中正则表达式常用字符

符号功能示例
.匹配除换行符\n之外的任意单个字符a.c可以匹配abc、a1c、a$c 等
^匹配字符串的开头^hello匹配以hello开头的字符串
*匹配前面的字符或子表达式0次或多次ab*c可以匹配ac、abc、abbc等
+匹配前面的字符或子表达式1次或多次ab+c可以匹配abc、abbc、abbbc等,但不匹配ac
?匹配前面的字符或子表达式0次或1次colou?r可以匹配color或colour
[]字符集,匹配方括号中的任意一个字符[abc]匹配a、b或c;[a-Z]匹配任意小写字母
()分组,将括号内的表达式视为一个整体(ab)+匹配一个或多个连续的ab
|选择符,匹配左边或右边的表达式(a|b)c匹配ac或 bc
\转义字符,用于取消特殊字符的含义.匹配.字符本身;\匹配\字符本身
<词首定位符<love
>词尾定位符love>
\ (\)匹配后的标签(love)able\1er
a|b匹配a或blove|hate
x{m}匹配前面的字符恰好m次a{3}b匹配aaab
x{m,}匹配前面的字符至少m次a{2,}b
x{m,n}匹配前面的字符至少m次,但不超过n次a{2,4}b

1.3 grep常用命令 

1)基本搜索

# 搜索文件 file.txt 中包含 karry 的行
grep "Karry" file.txt

2)忽略大小写

# 搜索文件 file.txt 中包含 karry(不区分大小写)的行。
grep -i "karry" file.txt

3)递归搜索目录

# 递归搜索目录 /opt中所有文件,查找包含 pattern 的行
grep -r "pattern"  /opt/

4)显示匹配行号

# 搜索文件 file.txt 中包含 karry 的行,并显示匹配行号
grep -n "Karry" file.txt

5)仅显示匹配文件名

# 搜索当前目录下所有 `.txt` 文件,显示包含 `pattern` 的文件名。
grep -l "pattern" *.txt

6)反向匹配

# 搜索文件 `file.txt` 中不包含 `pattern` 的行。
grep -v "pattern" file.txt

7)显示匹配行及之后的行

# 搜索文件 `file.txt` 中包含 `pattern` 的行,并显示匹配行及之后的 3 行。
grep -A 3 "pattern" file.txt

二、awk

awk是一个强大的文本处理工具,主要用于对结构化数据进行模式扫描和处理,有着强大的文本格式化能力。它支持复杂的操作和脚本编写,能够进行模式匹配、文本处理、数据报告生成等。

awk功能:

  • 字符串处理和替换;

  • 数据统计和报告生成;

  • 复杂的条件判断和循环处理;

  • 数据格式转换。

2.1 基本语法

awk [选项参数] 'pattern { action }' file

参数说明:

1)pattern:匹配的模式,支持正则表达式。

2)action:在匹配模式的行上执行的操作。

2.2 常见的内置变量

内置变量说明
$0表示完整的输入记录
$n表示指定分隔符后,当前指定的第n个字段
FS表示字段输入分隔符,默认以空格为分隔符
OFS表示字段输出分隔符
NF表示字段的个数,即以分隔符分割后,当前行一共有多少个字段
NR表示当前记录数,即行数

2.3 awk常用命令举例

1)基本示例

# 打印文件file.txt的每一行
awk '{ print }' file.txt

2)指定字段分隔符

假设文件内容用逗号分隔,打印第1、第3个字段。(其中  -F  ',' 可以直接简写成-F,)

awk -F ',' '{ print $1, $3 }' file.txt

3)按条件过滤

# 打印第2列字段(age)大于30的人的姓名
awk -F ',' '$2 > 30 { print $1 }' file.txt

三、sed

sed是一个流编辑器,主要用于对文本进行非交互式编辑。它可以进行插入、删除、替换、提取等操作,是文本处理和转换的利器。

功能

  • 文本替换和删除;

  • 模式匹配和文本插入;

  • 支持脚本编写进行复杂的文本处理;

  • 数据流操作。

3.1 基本格式

sed [选项参数] 'script' [file]

参数说明:

1)script:sed 内置的命令字符。主要是用于对文件进行增删改查等操作。

2)file:要处理的输入文件。若不指定文件,sed会从标准输入读取。

3.2 常用选项参数:

常见选项参数说明
-n表示取消默认的sed输出,通常与sed内置命令p一起使用
-e script直接在命令行上添加要执行的sed脚本
-f script-file从脚本文件中读取sed命令
-i 直接修改文件内容,而不是输出到标准输出。如果不加-i,sed修改的是内存数据。
-r使用扩展正则表达式
s将文件视为独立的文件,而不是单一的流

3.3 常用命令举例

1)文本替换

# 基本替换:将`file.txt`中的第一个匹配`Karry`的字符串替换为`Bob`
sed 's/Karry/Bob/' file.txt
# 忽略大小写替换:将`file.txt`中的所有匹配`Karry`的字符串替换为`Bob`
sed 's/Karry/Bob/Ig' file.txt
# 全局替换:将`file.txt`中的所有匹配`Lily`的字符串替换为`karry`
sed 's/Lily/karry/g' file.txt
# 指定行替换:将`file.txt`中的第4行中匹配`Joan`的字符串替换为`Carol`
sed '4s/Joan/Carol/' file.txt
# 行号范围替换:将`file.txt`中的第3到第6行中匹配`KARRY`的字符串替换为`karry`
sed '3,6s/KARRY/karry/Ig' file.txt

使用 sed 进行文本替换时,默认情况下,sed 只是将替换后的文本输出到标准输出(通常是终端),而不会直接修改源文件。只有使用-i参数进行替换,会修改源文件。

# 替换源文件内容:直接在`file.txt`中替换所有匹配`Karry`的字符串为`Bob`,并保存修改(修改源文件)
sed -i 's/Karry/Bob/g' file.txt

#备份原始文件,使用`-i`参数加上备份扩展名来实现,进行替换操作之前会创建一个`file.txt.bak`备份文件
sed -i.bak 's/Karry/Bob/g' file.txt

2)文本删除

# 删除某行:删除`file.txt`中的第5行
sed '3d' file.txt

# 行号范围删除:删除`file.txt`中的第2到第4行。
sed '3,4d' file.txt 

3)文本插入

# 插入行:在`file.txt`中的第2行之前插入`This is a new line.`
sed '2i\This is a new line.' file.txt

# 追加行:在`file.txt`中的第3行之后追加`This is a new line.`
sed '3a\This is a new line.' file.txt 

标签:shell,匹配,sed,file,grep,txt,替换,三剑客
From: https://blog.csdn.net/weixin_43612842/article/details/141598598

相关文章

  • 【Linux入门】shell基础篇——变量与运算
    文章目录shell中的变量概述变量的作用Shell变量名与变量值变量名变量值变量的作用范围局部变量(LocalVariables)全局变量(GlobalVariables)注意变量的类型1.环境变量(EnvironmentVariables)2.位置变量(PositionalVariables)3.预定义变量(PredefinedVariables)补充:自定......
  • xshell使用跳板机ssh连结远程后使用SFTP
    xshell连结跳板机后,再使用ssh连结到真实机器,SFTP只能显示原跳板机的目录,不能显示真实目录.可以使用隧道,代理来显示真实目标机器的目录.参考:https://blog.csdn.net/qq_43797186/article/details/1236690711.在原跳板机的ssh连结,增加隧道ssh连结属性->连结->SSH->隧道......
  • Server monitoring shell
    #!/usr/bin/envbashREMOTE_OK=remote_okREMOTE_FAIL=remote_failTIMESTAMP=`date+%F%H%M%S`CURRENT_HTML=/var/www/html/${TIMESTAMP}.htmlCURRENT_INDEX=/var/www/html/index.htmlLN=/bin/lnSERVER_LIST=server_listPASS=passcat<<EOF>$CURRENT_HTM......
  • ldap shell
    #!/usr/bin/envbashNUM1=10000000NUM2=3600NUM3=24NUM4=90if[-syad];then>yadfi/usr/bin/ldapsearch-Hldap://xxx.com-YGSSAPI-N-bou=xxx,dc=xxx,dc=com'(&(objectClass=user)(userAccountControl=512))'|greppwdLastSet|a......
  • Breach shell
    #!/usr/bin/bashif[-sbreach];then>breachfi/usr/bin/ldapsearch-Hldap://xxxx-YGSSAPI-N-bcn=xxx,ou=Groups,ou=xxx,ou=Corporate,dc=xxx,dc=xxx|grep-i"member"|awk-F":"'{print$2}'|awk-F","......
  • backup shell
    #!/bin/bashecho"USBbackuproutineforcopyinglocalsondrelZFSpoolandLVMvolumestoUSBraidarraymountedat/BackupBox"PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bi......
  • 18 个一线工作中常用 Shell 脚本
    1、检测两台服务器指定目录下的文件一致性2、定时清空文件内容,定时记录文件大小3、检测网卡流量,并按规定格式记录在日志中4、计算文档每行出现的数字个数,并计算整个文档的数字总数5、从FTP服务器下载文件6、连续输入5个100以内的数字,统计和、最小和最大7、监测Nginx访......
  • 华为万兆猫HN8145X6使能+补全AllShell+修改SN+E改XG+切换华为界面
    第〇部分准备工作1、查询老光猫上的LOID(电信、联通)、Password(移动)。1.1用光猫默认账号密码(详见光猫底部铭牌)访问光猫;状态-状态总览:宽带识别码(LOID):网络-远程管理-宽带识别码(LOID)认证-宽带识别码(LOID):2、记录老光猫的互联网、IPTV的默认配置数据,截图存档(建议项,一般......
  • Shell脚本学习_运算符
    目录一、算数运算符1、expr命令:2、算数运算符介绍:3、使用(()) 进行运算: 4、bc命令:1.bc中互动式的数学运算:2.非互动式的管道运算:3.非互动式的输入重定向运算:二、比较运算符 1、整数比较运算符:2、字符串比较运算符:3、[[]] 和 []的区别:三、布尔运算......
  • power shell实现文任意件夹目录名称写入指定文本文件中
    在PowerShell中,你可以使用脚本来遍历一个文件夹并将其目录名称写入到一个指定的文本文件中。以下是一个详细的步骤说明和示例脚本:步骤说明1.**打开PowerShell**:你可以通过开始菜单搜索“PowerShell”并打开它。2.**编写脚本**:使用PowerShell脚本语言编写一个脚本,该脚本将......