目录

Linux中grepsed和awk常见用法总结

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

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