Linux:shell脚本 正则表达式与AWK

这篇具有很好参考价值的文章主要介绍了Linux:shell脚本 正则表达式与AWK。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

 文章来源地址https://www.toymoban.com/news/detail-651795.html

一、正则表达式

1.2元字符

 1.3表示次数

1.4位置锚定

1.5分组或其他

1.6扩展正则表达式

1.7grep

二、AWK

awk -F

​编辑三、sed

1.sed简介

2.sed工作流程

3.sed命令格式

3.1打印全部内容

 3.2 查看文件,打印全部内容

 3.3打印指定行内容

3.4支持正则表达式,打印范围内容 

3.5#,/关键字/p’ 从第#行开始匹配

 3.6 ‘/关键字/,#’ 找到第#个关键字为止​编辑

 3.7打印奇偶数行

3.8删除指定行 

 3.9 先备份内容再删除

3.10  在指定行后插入 

 3.11修改全局,后面加g

3.12 查找几点到几点之间的日志


一、正则表达式

由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

主要用来匹配字符串(命令结果,文本内容)

通配符匹配文件(而且是已存在的文件)

  • 基本正则表达式

  • 扩展正则表达式

1.2元字符

.   匹配任意单个字符,可以是一个汉字  
[]   匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z]   [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]


[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围
广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
Unicode 正则表达式会匹配全角空格符

元字符点(.)

#此处的点代表字符

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

#点值表示点需要转义

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

#r..t ..代表任意两个字符 

 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 1.3表示次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符,不包括0次
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\}  #匹配前面的字符至多n次,<=n
\{n,\}  #匹配前面的字符至少n次
ifconfig ens33|grep netmask|grep -o 

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

1.4位置锚定

^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行  只有root)
^$ #空行
^[[:space:]]*$ #  空白行


\< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b        #词尾锚定,用于单词模式的右侧
\<PATTERN\>     #匹配整个单词 

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

1.5分组或其他

分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, ...

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

1.6扩展正则表达式

*   匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n}  #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0 

 表示邮箱:Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 表示手机号:

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

1.7grep

grep [选项]… 查找条件 目标文件

  • -i:查找时忽略大小写

  • -v:反向查找,输出与查找条件不相符的行

  • -o 只显示匹配项

  • -f 对比两个文件的相同行

  • -c 匹配的行数([root@localhost ky15]# grep -c root passwd 2)

-color=auto 对匹配到的文本着色显示
-m  # 匹配#次后停止

-v 显示不被pattern匹配到的行,即取反

-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数

-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行 

-B # before, 前#行
-C # context, 前后各#行

-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file

-w 匹配整个单词 

二、AWK

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行

指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

 #打印root 多少行=passwd里的行数

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

#分区利用率

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

#用冒号分隔开

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 #取ip地址

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

awk -F

 -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

#  $0代表全部元素

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

#  $1,$3代表第一第三列

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 #  已root为开头的行

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

#  统计当前已/bin/bash结尾的行 

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

NR:当前处理行的行号

NR写在后面则在后面显示行号

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

NR%2==0取偶数行

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器#NR%2==1取奇数行

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 #NR==1,NR==4取区间行 

三、sed

1.sed简介

  • sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流

  • sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中

2.sed工作流程

  • 读取: sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。
  • 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行, 除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
  • 显示:发送修改后的内容到输出流(屏幕)。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上.述过程将重复执行,直至所有内容被处理完。

3.sed命令格式

-n 不输出模式空间内容,即不自动打印,加p恢复自动打印
-e 多点编辑
-f 从指定文件中读取编辑脚本
-r  -E 使用扩展正则表达式
-i 备份文件并原处编辑
操作 作用
s 替换,替换指定字符
d 删除,删除选定的行
a 增加,在当前行下面增加一行指定内容
i 插入,在选定行上面插入一行指定内容
c 替换,将选定行替换为指定内容
Y 替换,将选定行替换为指定内容
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用。
= 打印行号
l(小写L) 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

3.1打印全部内容

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 3.2 查看文件,打印全部内容

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 3.3打印指定行内容

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器 

3.4支持正则表达式,打印范围内容 

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

3.5#,/关键字/p’ 从第#行开始匹配

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器 

 3.6 ‘/关键字/,#’ 找到第#个关键字为止Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 3.7打印奇偶数行

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

3.8删除指定行 

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 3.9 先备份内容再删除

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

3.10  在指定行后插入 

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器 

 3.11修改全局,后面加g

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

3.12 查找几点到几点之间的日志

Linux:shell脚本 正则表达式与AWK,linux,运维,服务器

 

 

到了这里,关于Linux:shell脚本 正则表达式与AWK的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux Shell 脚本编程学习之【第3章 正则表达式 (第一部分)】

    1、正则表达式是由一串字符和元字符构成的字符串,简称 RE(Regular Expression)。 2、正则表达式起到数据过滤作用。 3、POSIX 标准将正则表达式分为两类:基本的正则表达式和扩展的正则表达式,大部分 Linux 应用和工具仅支持基本的正则表达式。 Linux Shell 以一串字符作为表达式

    2024年02月16日
    浏览(51)
  • Linux Shell 脚本编程学习之【第3章 正则表达式 (第二部分) grep命令】

    1、文本搜索工具 2、GREP 是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。 3、grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。模式中包含空格,则必须用双引号括起来。 选 项 意 义 -c 只输出匹配行

    2024年02月16日
    浏览(56)
  • shell脚本正则表达式

    声明: 以下内容为个人笔记,内容不完全正确,请谨慎参考。 含义: 正则表达式使用的每个单独字符串来描述、匹配一些列符合语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等文本处理工具都支

    2024年04月22日
    浏览(45)
  • Shell脚本攻略:通配符、正则表达式

    目录 一、理论 1.通配符 2.正则表达式 二、实验 1.通配符 2.正则表达式 (1)概念 通配符只用于匹配文件名、目录名等,不能用于匹配文件内容,而且是已存在的文件或者目录。 各个版本的shell都有通配符,这些通配符是一些特殊的字符, 用户可以在命令行的参数中使用这些

    2024年02月07日
    浏览(45)
  • Linux三剑客(awk、sed、grep) 和 正则表达式

    本文章适用于一定工作经验(熟悉Linux基础)的同行,欢迎各位大佬批判指正。 上手三剑客(grep,sed,awk)之前,需要熟悉正则表达式, 正则表达式 ——事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的

    2024年02月15日
    浏览(60)
  • Linux Shell :正则表达式

    先来看一句 Shell 代码: dpkg --list : dpkg 是 Debian 系列 Linux 发行版(如 Ubuntu)的包管理工具。 --list 选项用于列出所有已安装的软件包。 | :这是一个管道符号,用于将前一个命令的输出作为后一个命令的输入。在这里, dpkg --list 的输出被直接传递给 grep 命令。 grep -E -o \\\'cu

    2024年02月08日
    浏览(43)
  • 正则表达式 —— Awk

    awk:文本三剑客之一,是功能最强大的文本工具 awk也是按行来进行操作,对行操作完之后,可以根据指定命令来对行取列 awk的分隔符,默认分隔符是空格或tab键,多个空格会压缩成一个 awk的用法 awk的格式:awk  选项  \\\'模式或条件{操作}\\\'  文件      在awk中操作默认就

    2024年02月14日
    浏览(32)
  • awk经典实战、正则表达式

    目录 1.筛选给定时间范围内的日志  2.统计独立IP 案列  需求 代码  运行结果 3.根据某字段去重 案例 运行结果 4.正则表达式 1)认识正则  2)匹配字符 3)匹配次数  4)位置锚定:定位出现的位置 5)分组和后向引用  grep/sed/awk用正则去筛选日志时,如果要精确到小时、分钟

    2024年02月13日
    浏览(32)
  • shell 正则表达式详解

    目录 正则表达式 一,什么是正则表达式 二,为什么使用正则表达式 三,如何使用正则表达式 示例: 四,基本正则表达式 基本正则表达式示例: 正则表达式字符集示例: 五,扩展正则表达式 扩展正则表达式示例: 扩展:        正则表达式是通过一些特殊字符的排列,

    2024年01月17日
    浏览(48)
  • Shell编程之正则表达式

    Linux中的正则表达式(regular expression)和通配符(wildcard)都是用于匹配字符串的工具,但它们之间存在一些区别和应用场景的不同。 正则表达式是描述一种字符串匹配的模式,通过特殊的字符和语法,可以检查一个字符串是否匹配某种模式,匹配成功后可以进行子串替换、取出符

    2024年02月01日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包