Linux中grep、sed和awk常见用法总结

1.概述

Linux系统下,grep、sed和awk三个命令是最常用的、非常强大的文本处理工具,可以用于搜索、替换、过滤、排序等多种操作,掌握这三种工具的用法,可以大大提高我们在Linux下处理文本的效率。

2.grep 命令

grep是一种非常常见的文本搜索工具,它可以搜索指定字符串在一个或多个文件中出现的行,并将结果输出到标准输出。语法格式如下:

|--------------------------------------|
| grep OPTIONS PATTERN FILE... |

其中,OPTIONS表示选项,PATTERN表示要搜索的模式,FILE表示要搜索的文件名。

grep命令的常见选项包括:

  1. -i:忽略大小写
  2. -w:完全匹配
  3. -v:显示不匹配的行
  4. -n:显示行号
  5. -c:显示匹配行的数量
  6. -r:递归搜索子目录
  7. -e:搜索多个字符串

详细选项参数及其含义可以通过"grep --help"获取,具体如下:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| test@localhost \~$ grep --help 用法:grep 选项... 模式 文件... 在每个 <文件>中查找给定<模式>。 例如:grep -i 'hello world' menu.h main.c <模式>可以包括多个模式字符串,使用换行符进行分隔。 模式选择与解释: -E, --extended-regexp <模式> 是扩展正则表达式 -F, --fixed-strings <模式> 是字符串 -G, --basic-regexp <模式> 是基本正则表达式 -P, --perl-regexp <模式> 是 Perl 正则表达式 -e, --regexp=<模式> 用指定的<模式>字符串来进行匹配操作 -f, --file=<文件> 从给定<文件>中取得<模式> -i, --ignore-case 在模式和数据中忽略大小写 --no-ignore-case 不要忽略大小写(默认) -w, --word-regexp 强制<模式>仅完全匹配字词 -x, --line-regexp 强制<模式>仅完全匹配整行 -z, --null-data 数据行以一个 0 字节结束,而非换行符 杂项: -s, --no-messages 不显示错误信息 -v, --invert-match 选中不匹配的行 -V, --version 显示版本信息并退出 --help 显示此帮助并退出 输出控制: -m, --max-count=<次数> 得到给定<次数>次匹配后停止 -b, --byte-offset 输出的同时打印字节偏移 -n, --line-number 输出的同时打印行号 --line-buffered 每行输出后刷新输出缓冲区 -H, --with-filename 为输出行打印文件名 -h, --no-filename 输出时不显示文件名前缀 --label=<标签> 将给定<标签>作为标准输入文件名前缀 -o, --only-matching 只显示行中非空匹配部分 -q, --quiet, --silent 不显示所有常规输出 --binary-files=TYPE 设定二进制文件的 TYPE(类型); TYPE 可以是 'binary'、'text' 或 'without-match' -a, --text 等同于 --binary-files=text -I 等同于 --binary-files=without-match -d, --directories=ACTION 读取目录的方式; ACTION 可以是`read', `recurse',或`skip' -D, --devices=ACTION 读取设备、先入先出队列、套接字的方式; ACTION 可以是`read'或`skip' -r, --recursive 等同于--directories=recurse -R, --dereference-recursive 同上,但遍历所有符号链接 --include=GLOB search only files that match GLOB (a file pattern) --exclude=GLOB skip files that match GLOB --exclude-from=FILE skip files that match any file pattern from FILE --exclude-dir=GLOB skip directories that match GLOB -L, --files-without-match 只打印没有匹配上的<文件>的名称 -l, --files-with-matches 只打印有匹配的<文件>的名称 -c, --count 只打印每个<文件>中的匹配行数目 -T, --initial-tab 行首制表符对齐(如有必要) -Z, --null 在<文件>名最后打印空字符 文件控制: -B, --before-context=NUM 打印文本及其前面NUM 行 -A, --after-context=NUM 打印文本及其后面NUM 行 -C, --context=NUM 打印NUM 行输出文本 -NUM 等同于 --context=NUM --color=WHEN, --colour=WHEN 使用标记高亮匹配字串; WHEN 可以是"always"、"never"或"auto" -U, --binary 不要清除行尾的 CR 字符(MSDOS/Windows) 若给定<文件>为"-",则从读取标准输入。 若无<文件>参数,则除非处于 递归工作模式视为从"."读取之外,一律视为从"-"读取。如果提供了少于 两个<文件>参数,则默认启用 -h 选项。如果有任意行(或者指定了 -L 选项 并有任意文件)被匹配,则退出状态为 0,否则为 1;如果有错误产生,且未指 定 -q 参数,则退出状态为 2。 |

3.sed 命令

sed是一种流编辑器,它可以执行各种文本操作,如替换、删除、插入等。语法格式如下:

|-------------------------------------|
| sed OPTIONS COMMAND FILE... |

其中,OPTIONS表示选项,COMMAND表示要执行的sed命令,FILE表示要处理的文件名。

sed命令的常见动作包括:

  1. a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(当前行的后一行)
  2. i:插入指定字符串,i的后面可以接字符串,而这些字符串会在新的一行出现(当前行的前一行)
  3. s:替换指定模式,通常会搭配正则表达式
  4. c:替换指定行
  5. d:删除指定行
  6. y:字符串转换
  7. p:打印匹配的行,通常会与参数sed -n一起使用

详细选项参数及其含义可以通过"sed --help"获取,具体如下:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| test@localhost \~$ sed --help 用法: sed 选项... {脚本(如果没有其他脚本)} 输入文件... -n, --quiet, --silent 取消自动打印模式空间 --debug 对程序运行进行标注 -e 脚本, --expression=脚本 添加"脚本"到程序的运行列表 -f 脚本文件, --file=脚本文件 添加"脚本文件"到程序的运行列表 --follow-symlinks 直接修改文件时跟随软链接 -i扩展名, --in-place=扩展名 直接修改文件(如果指定扩展名则备份文件) -l N, --line-length=N 指定"l"命令的换行期望长度 --posix 关闭所有 GNU 扩展 -E, -r, --regexp-extended 在脚本中使用扩展正则表达式 (为保证可移植性使用 POSIX -E)。 -s, --separate 将输入文件视为各个独立的文件而不是单个 长的连续输入流。 --sandbox 在沙盒模式中进行操作(禁用 e/r/w 命令)。 -u, --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出 -z, --null-data 使用 NUL 字符分隔各行 --help 打印帮助并退出 --version 输出版本信息并退出 如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为 sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准 输入读取数据。 |

4.awk 命令

awk是一种文本处理工具,它可以用于格式化、过滤与计算等操作。语法格式如下:

|-------------------------------------------------|
| awk OPTIONS 'PATTERN {ACTION} ' FILE... |

其中,OPTIONS表示选项,PATTERN表示要匹配的模式,ACTION 表示要执行的操作,FILE表示要处理的文件名。

awk命令的常见选项包括:

  1. print:打印指定内容
  2. if:条件判断
  3. for:循环结构
  4. sum:计算指定

详细选项参数及其含义可以通过"awk --help"获取,具体如下:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| test@localhost \~ ****awk --help**** Usage: awk \[POSIX or GNU style options\] -f progfile \[--\] file ... Usage: awk \[POSIX or GNU style options\] \[--\] 'program' file ... POSIX options: GNU long options: (standard) -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val Short options: GNU long options: (extensions) -b --characters-as-bytes -c --traditional -C --copyright -d\[file\] --dump-variables\[=file\] -D\[file\] --debug\[=file\] -e 'program-text' --source='program-text' -E file --exec=file -g --gen-pot -h --help -i includefile --include=includefile -l library --load=library -L\[fatal\|invalid\|no-ext\] --lint\[=fatal\|invalid\|no-ext\] -M --bignum -N --use-lc-numeric -n --non-decimal-data -o\[file\] --pretty-print\[=file\] -O --optimize -p\[file\] --profile\[=file\] -P --posix -r --re-interval -s --no-optimize -S --sandbox -t --lint-old -V --version To report bugs, see node \`Bugs' in \`gawk.info' which is section \`Reporting Problems and Bugs' in the printed version. This same information may be found at https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. PLEASE do NOT try to report bugs by posting in comp.lang.awk, or by using a web forum such as Stack Overflow. gawk is a pattern scanning and processing language. By default it reads standard input and writes standard output. Examples: gawk '{ sum += 1 }; END { print sum }' file gawk -F: '{ print $1 }' /etc/passwd |

5.使用实例

(1) grep使用实例

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| --在文件中搜索指定字符串 grep -i "关键字" 文件 名 --模糊匹配 (不区分大小写) grep -w "关键字" 文件 名 -- 完全 匹配 --在文件中搜索多个字符串 grep -e "关键字 1 " -e "关键字2" 文件 名 --在文件中搜索并显示匹配的行号 grep -n "关键字" 文件 名 --在文件中搜索并显示不匹配的行 grep -v "关键字" 文件 名 --在目录中递归搜索指定字符串 grep -r "关键字" directory / --查看文件中搜索的关键字的后n行 cat 文件 | grep -An -i "关键字" --查看文件中搜索的关键字的前n行 cat 文件 | grep -Bn -i "关键字" --查看文件中搜索的关键字的前后n行 cat 文件 | grep -C20 -i "关键字" |

(2) sed使用实例

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| /* 选择 文本p */ --显示文件的1-3行,不使用-n sed 1,3p 文件名 --只显示文件的1-3行,使用-n sed -n 1,3p 文件名 --显示包含关键字的行 sed -n '/ 关键字 /p' 文件名 /* 替换 文本s */ 语法格式 : 位置参数1 **** ****,**** ****位置参数**** ****2**** **** s/ 匹配字符/替换 字符 /标志 标志说明: g :全局匹配, 会 替换文本行 中所有 符合 规则的字符串 十进制数字 n:替换第n 个 符合规则的字符串 p:替换第一个 , 并输出到标准输出 w: 替换第一个,并输出到磁盘文件中 空: 不加标志,则替换第一个 --把文件的a全部替换成A sed 's/ a/A /g' 文件名 > 新文件名 --对指定行进行替换 sed '1, 3 s/ a/A /g' 文件名 > 新文件名 /* 删除 文本d */ --删除文件的第一行 sed '1d' 文件名 --删除文件的最后一行 sed 'd'**** ****文件名**** --删除空白行 ****sed '/\^/d' 文件名 /* 追加 文本a */ --在文件中root开头的行的后面插入一行test sed '/ ^ root/a test' 文件名 /* 插入 文本i */ --在文件中root开头的行的前面插入一行test sed '/ ^ root/i test' 文件名 |

(3) awk使用实例

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| --打印文件中的所有行 awk '{print}' filename --打印文件中第二列的内容 awk '{print 2}' filename**** --计算文件中所有数字的总和 ****awk '{sum += 1} END {print sum}' filename --打印文件中包含指定字符串的行 awk '/ 关键字/ {print}' filename --在文件中指定列后面添加指定字符串 awk '{3 = 3 "关键字"} {print}' filename |

相关推荐
ajassi200015 分钟前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎19 分钟前
linux 进程信号(下)
linux·运维·服务器
skywalk816336 分钟前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko738 分钟前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋44 分钟前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm1 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Madison-No71 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
Liuqy-051 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
流浪0011 小时前
Linux系统篇47——线程(十二) POSIX 信号量与环形队列,把判空判满提前到访问之前
linux·操作系统·线程·信号量·环形队列
咖丨喱2 小时前
【MMC Core + hc16 Host(WiFi SDIO 如何落到控制器)】
linux