Linux中grepsed和awk常见用法总结
目录
Linux中grep、sed和awk常见用法总结
1.概述
Linux系统下,grep、sed和awk三个命令是最常用的、非常强大的文本处理工具,可以用于搜索、替换、过滤、排序等多种操作,掌握这三种工具的用法,可以大大提高我们在Linux下处理文本的效率。
2.grep 命令
grep是一种非常常见的文本搜索工具,它可以搜索指定字符串在一个或多个文件中出现的行,并将结果输出到标准输出。语法格式如下:
grep [OPTIONS] PATTERN [FILE…] |
其中,OPTIONS表示选项,PATTERN表示要搜索的模式,FILE表示要搜索的文件名。
grep命令的常见选项包括:
- -i:忽略大小写
- -w:完全匹配
- -v:显示不匹配的行
- -n:显示行号
- -c:显示匹配行的数量
- -r:递归搜索子目录
- -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命令的常见动作包括:
- a:新增,a的后面可以接字符串,而这些字符串会在新的一行出现(当前行的后一行)
- i:插入指定字符串,i的后面可以接字符串,而这些字符串会在新的一行出现(当前行的前一行)
- s:替换指定模式,通常会搭配正则表达式
- c:替换指定行
- d:删除指定行
- y:字符串转换
- 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命令的常见选项包括:
- print:打印指定内容
- if:条件判断
- for:循环结构
- 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 |
5.使用实例
(1) grep使用实例
–在文件中搜索指定字符串 grep -i “关键字” 文件 名 –模糊匹配 (不区分大小写) grep -w “关键字” 文件 名 – 完全 匹配 –在文件中搜索多个字符串 grep -e “关键字 1 ” -e “关键字2” 文件 名 –在文件中搜索并显示匹配的行号 grep -n “关键字” 文件 名 –在文件中搜索并显示不匹配的行 grep -v “关键字” 文件 名 –在目录中递归搜索指定字符串 grep -r “关键字” directory / –查看文件中搜索的关键字的后n行 ****cat 文件 |
(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 |