Linux 使用正则表达式的常用命令

【grep 命令】

1.基本操作

1)作用:grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。

2)命令格式:grep [选项] 要匹配的字符串 文件名

3)常见选项:

-b 将二进制文件作为文本来进行匹配
-c 统计以模式匹配的数目
-i 忽略大小写
-n 显示匹配文本所在行的行号
-v 反选,输出不匹配行的内容
-r 递归匹配查找
-A n 除了列出匹配行之外,还列出后面的 n 行
-B n 除了列出匹配行之外,还列出前面的 n 行
--color=auto 将输出中的匹配项设置为自动颜色显示

4)实例:

Linux 使用正则表达式的常用命令_第1张图片

2.使用正则表达式

1)正则表达式引擎

grep 支持三种正则表达式引擎,分别用三个参数指定:

-G POSIX 基本正则表达式,BRE
-E POSIX 扩展正则表达式,ERE
-P

Perl 正则表达式,PCRE

2)使用基本正则表达式,BRE

grep 默认使用基本正则表达式,或者在使用的时候加上 -G 参数

① 位置

例:

查找 /etc/group 文件中以 "root" 为开头的行

② 数量

例:

匹配以 'z' 开头以 'o' 结尾的所有字符串

匹配以 'z' 开头以 'o' 结尾,中间包含一个任意字符的字符串

匹配以'z'开头,以任意多个'o'结尾的字符串

注:\n 是换行符

③ 选择

特殊符号及说明

[:alnum:]

代表英文大小写字母及数字,即:0-9, A-Z, a-z
[:alpha:] 代表英文大小写字母,即:A-Z, a-z
[:digit:] 代表数字,即:0-9
[:lower:] 代表小写字母,即:a-z
[:upper:] 代表大写字母,即:A-Z
[:punct:] 代表标点符号,即:" ' ? ! ; : # $ 等
[:cntrl:] 代表键盘上面的控制按键,包括:CR, LF, Tab, Del 等
[:print:] 代表任何可以被列印出来的字符
[:blank:] 代表空白键与 [Tab] 按键
[:graph:] 除了空白字节(空白键与 [Tab] 键)外的其他所有按键
[:space:] 代表任何会产生空白的字符,包括:空白键, [Tab], CR 等
[:xdigit:] 代表 16 进位的数字类型,包括: 0-9, A-F, a-f 的数字与字节

例:

匹配所有的小写字母

匹配所有的数字

匹配所有的数字

匹配所有的小写字母

匹配所有的大写字母

匹配所有的字母和数字

匹配所有的字母

3)使用扩展正则表达式,ERE

通过 grep 使用扩展正则表达式需要加上 -E 参数,或使用 egrep

① 数量

例:

只匹配 "zo"

匹配以 "zo" 开头的所有单词

② 选择

例:

匹配 "www.baidu.com" 和 "www.google.com"

匹配不包含 "baidu" 的内容

注:. 符号有特殊含义,所以需要转义

【sed 流编辑器】

sed 工具是用于过滤和转换文本的流编辑器,与 vim、emacs、geditdeng等编辑器不同的是,sed 是一个非交互式的编辑器。

本文仅介绍 sed 的基本操作,更多内容参考以下链接:sed 简明教程、sed 单行脚本快速参考、sed完全手册

1.sed 命令基本格式:sed [选项] [执行命令] [输入文件]

2.常用参数:

-n 安静模式,只打印受影响的行,默认打印输入数据的全部内容
-e 用于脚本添加多个执行命令一次执行,在命令行中执行多个命令不需要加
-f filename 指定执行 filename 文件中的命令
-r 使用扩展正则表达式,默认为标准正则表达式
-i 将直接修改输入文件内容,而不是打印到标准输出设备

3.执行命令格式:

1)[n1][,n2] command [作用范围]

2)[n1][~step] command [作用范围]

n1、n2 表示输入内容的行号,它们之间为 ,逗号表示从 n1 到 n2 行,~波浪号表示从 n1 开始以 step 为步进的所有行,command 为执行动作。

4.常见执行命令

s 行内替换
c 整行替换

a

插入到指定行的后面
i 插入到指定行的前面
p 打印指定行,通常与 -n 参数配合使用
d 删除指定行

5.实例

1)找一个操作用的文件

2)打印 2-5 行

3)打印奇数行

Linux 使用正则表达式的常用命令_第2张图片

4)将输入文本中 "root" 全局替换为 "test",并只打印替换的那一行

5)行间替换

找出 root 的那一行并计算行号

将 root 替换为 www.root.com

【awk 文本处理语言】

1.概述

AWK 是一种优良的文本处理工具,是 Linux 中现有的功能最强大的数据处理引擎之一,其使用的 AWK 程序设计语言,又叫样式扫描和处理语言。它允许创建简短的程序,通过程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表等等。简单地说,AWK 是一种用于处理文本的编程语言工具。

awk 所有的操作都是基于 pattern(模式)—action(动作) 对 来完成的,其形式为:pattern {action}

如同很多编程语言一样,它将所有的动作操作用一对 {} 花括号包围起来,其中 pattern 通常是表示用于匹配输入的文本的“关系式”或“正则表达式”,action 则是表示匹配后将执行的动作。

在一个完整 awk 操作中,模式与动作可以只有其中一个。如果没有 pattern,则默认匹配输入的全部文本;如果没有 action,则默认为打印匹配内容到屏幕。

awk 处理文本的方式,是将文本分割成一些“字段”,然后再对这些字段进行处理,默认情况下,awk 以空格作为一个字段的分割符,也可以任意指定分隔符。

本文仅介绍 awk 的基本操作,更多内容参考以下链接:awk 程序设计语言、awk 简明教程、awk 用户指南

 

2.awk 命令基本格式:awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]

-F 参数用于预先指定字段分隔符,-v 参数用于预先为 awk 程序指定变量,-f 参数用于指定 awk 命令要执行的程序文件,或者在不加 -f 参数的情况下直接将程序语句放在这里,最后为 awk 需要处理的文本输入,且可以同时输入多个文本文件。

3.awk 常用内置变量

FILENAME

当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串
$0 当前记录的内容
$N N表示字段号,最大值为NF变量的值
FS 字段分隔符,由正则表达式表示,默认为" "空格
RS 输入记录分隔符,默认为"\n",即一行为一个记录
NF 当前记录字段数
NR 已经读入的记录数
FNR 当前输入文件的记录数
OFS 输出字段分隔符,默认为" "空格
ORS 输出记录分隔符,默认为"\n"

4.实例

存在一文档

1)使用 awk 将内容打印到终端

Linux 使用正则表达式的常用命令_第3张图片

2)将 test 的第一行的每个字段单独显示为一行

Linux 使用正则表达式的常用命令_第4张图片

注:在学习和使用 awk 的时候,应尽可能将其作为一门程序语言来理解,这样将会使你学习更容易,所以初学阶段在练习 awk 时应该尽量按照分多行按照一般程序语言的换行和缩进来输入,而不是全部写到一行。

你可能感兴趣的:(Linux,学习笔记)