shell————正则表达式基础及sed

一 什么是正则

  正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。

在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,下面我们就为大家介绍三种文本处理工具/命令:grep、sed、awk,它们三者均可以解释正则。

二 grep

参数

-n  :显示行号
-o  :只显示匹配的内容
-q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

-l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl ‘root‘ /etc 
-A  :如果匹配成功,则将匹配行及其后n行一起打印出来
-B  :如果匹配成功,则将匹配行及其前n行一起打印出来
-C  :如果匹配成功,则将匹配行及其前后n行一起打印出来
--color
-c  :如果匹配成功,则将匹配到的行数打印出来
-E  :等于egrep,扩展
-i  :忽略大小写

-v  :取反,不匹配
-w:匹配单词

举例一:

[[email protected] ~]# cat a.txt
root123
ROot asdf
Root_123
rOOtss
root 123
[[email protected] ~]# grep -i "root" a.txt
root123
ROot asdf
Root_123
rOOtss
root 123
[[email protected] ~]# grep -w "root" a.txt
root 123

grep种类
grep
fgrep
pgrep
egrep

正则介绍

^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾

扩展正则 sed 加 -r 参数 或转义
grep 加 -E 或 egrep 或转义
AWK 直接支持 但不包含{n,m}
可以使用--posix支持
[[email protected] ~]#  awk ‘/ro{1,3}/{print}‘ /etc/passwd
[[email protected] ~]#  awk --posix ‘/ro{1,3}/{print}‘ /etc/passwd

sed -n ‘/roo\?/p‘ /etc/passwd 
sed -rn ‘/roo?/p‘ /etc/passwd
? 前导字符零个或一个
+ 前导字符一个或多个
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出现m次
x\{m,\} x出现m次至多次(至少m次)
x\{m,n\} x出现m次至n次

posix定义的字符分类

[:alnum:] Alphanumeric characters.
匹配范围为 [a-zA-Z0-9]
[:alpha:] Alphabetic characters.
匹配范围为 [a-zA-Z]
[:blank:] Space or tab characters.
匹配范围为 空格和TAB键
[:cntrl:] Control characters.
匹配控制键 例如 ^M 要按 ctrl+v 再按回车 才能输出
[:digit:] Numeric characters.
匹配所有数字 [0-9]
[:graph:] Characters that are both printable and visible. (A space is print-
able, but not visible, while an a is both.)
匹配所有可见字符 但不包含空格和TAB 就是你在文本文档中按键盘上能用眼睛观察到的所有符号
[:lower:] Lower-case alphabetic characters.
小写 [a-z]
[:print:] Printable characters (characters that are not control characters.)
匹配所有可见字符 包括空格和TAB
能打印到纸上的所有符号
[:punct:] Punctuation characters (characters that are not letter, digits, con-
trol characters, or space characters).
特殊输入符号 +-=)(*&^%$#@!~`|\"‘{}[]:;?/>.<,
注意它不包含空格和TAB
这个集合不等于^[a-zA-Z0-9]
[:space:] Space characters (such as space, tab, and formfeed, to name a few).

[:upper:] Upper-case alphabetic characters.
大写 [A-Z]
[:xdigit:] Characters that are hexadecimal digits.
16进制数 [0-f]

三 sed

sed
流编辑器 stream editer,是以行为单位的处理程序

sed 流编辑器 stream editer

语法
sed [options] ‘command‘ in_file[s]
options 部分
-n
-e
-i
-f
command 部分
‘[地址1,地址2] [函数] [参数(标记)]‘

定址的方法 1.数字 2.正则
数字
十进制数
1 单行 
1,3 范围 从第一行到第三行
2,+4 匹配行后若干行
4,~3 从第四行到下一个3的倍数行
2~3 第二行起每间隔三行的行
$ 尾行
1! 除了第一行以外的行
正则
正则必须用//包裹起来
扩展正则需要用 -r 参数或转义

数字定址:sed -n ‘1p‘ /etc/passwd

正则定址:sed -n ‘/^root/p‘ /etc/passwd

正则介绍

^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾

扩展正则 加 -r 参数 或转义
sed -n ‘/roo\?/p‘ /etc/passwd 
sed -rn ‘/roo?/p‘ /etc/passwd
? 前导字符零个或一个
+ 前导字符一个或多个
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出现m次
x\{m,\} x出现m次至多次(至少m次)
x\{m,n\} x出现m次至n次

函数
增删改
a 后插
c 替换
i 前插
d 删除
输入输出
p 打印匹配的行 一般和 -n 参数连用,以屏蔽默认输出
r 从文件中读入
w 写入到文件中
控制流
! 命令取反 例: 1!d 删除第一行以外的行
{} 命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法

= 打印行号(输入行的号码,而非处理的次数行号) 例如: sed -n ‘2{=;p}‘ infile
n 读入下一行到模式空间 例:‘4{n;d}‘ 删除第5行
N 而是追加下一行到模式空间,再把当前行和下一行同时应用后面的命令

替换
s 字符串替换 s/old/new/

$ sed -n ‘s/root/ABCDEF/p‘ /etc/passwd

ABCDEF:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$ sed -n ‘s/root/ABCDEF/gp‘ /etc/passwd

ABCDEF:x:0:0:ABCDEF:/ABCDEF:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$ sed -n ‘s/root/ABCDEF/2p‘ /etc/passwd

root:x:0:0:ABCDEF:/root:/bin/bash

$ sed -n ‘s/root/ABCDEF/3p‘ /etc/passwd

root:x:0:0:root:/ABCDEF:/bin/bash

$ sed -n ‘s/root/ABCDEF/gp‘ /etc/passwd

ABCDEF:x:0:0:ABCDEF:/ABCDEF:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$

\(\) 保存被匹配的字符 以备反向引用\N时使用 最多9个标签 标签顺序从左至右
& 替换时使用,在不定义标签时使用(反向引用)

时间: 2024-11-05 12:29:35

shell————正则表达式基础及sed的相关文章

shell 正则表达式基础

1 常用的命令工具 grep.egrep.vim.sed.awk 2 基本的正则表达含义 d         匹配字母d .        匹配任意单个字符 *        匹配一个或多个 .*        匹配任意多个字符 ^        匹配字符串的开头 $        匹配字符串的结尾 []        匹配集合中的任意单个字符 [^]       匹配否定,对括号中的集合取反 [x-y]      匹配x到y连续的字符串范围 \        匹配转义后的字符串 \{n,\} 

Shell 正则表达式 基础

一.linux文本查找命令 三个基本常用的命令 1.grep:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本 2.egrep:扩展式grep,其使用扩展式正则表达式(ERE)来匹配文本 3.fgrep:快速grep,这个版本匹配固定字符串而非正则表达式. 二.grep的基本语法 GREP [options - ] pattern-spec [files-] 用途:匹配一个或多个模式的文本行 options: -E:使用扩展正则表达式进行匹配 -i:忽略大小写 --co

第七章 Shell正则表达式

正则表达式在每种语言中都会有,目的就是匹配符合你预期要求的字符串. 7.1 Shell正则表达式 基础正则表达式:BRE(basic regular express) 扩展正则表达式:ERE(extend regular express),扩展的表达式有+.?.|和() 符号 描述 示例 . 匹配除换行符(\n)之外的任意单个字符 匹配123: echo -e "123\n456" |grep -E '1.3' ^ 匹配字符串开头 匹配以abc开头的行: echo -e "a

周期性任务计划,包管理,sed以及shell编程基础

周期性任务计划,包管理,sed以及shell编程基础 1.每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"[[email protected] /]# crontab -e0 /12 /usr/bin/tar -zcf /data/backup/etc-$(date '+%Y-%m-%d--%H-%M').tar.gz /ect/*2.rpm包管理功能总结以及实例应用演示rpm是一个功能十分强大的软件包管理系统,

bash shell学习-正则表达式基础 (笔记)

A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子坦荡荡,小人长戚戚" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) 一.正则表达式基础 1.什么是正则表达式 正则表达式(Regular Expression, RE)是对字符串操作的一种逻辑公式,就是用一些事先定义好的特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

第一章、shell脚本基础

shell的作用:人和机器交互的工具-->其实是一个程序. shell里比较好用的程序是bash 默认情况下几乎所有的linux系统默认的shell都是bash ==== c语言为什么要编译.c语言是人认识的语言,根据某种编码进行翻译叫编译. shell脚本编程的优势. 查看当前shell [[email protected] ~]$ echo $SHELL /bin/bash [[email protected] ~]$  shell课程体系 Shell脚本编程 Shell基础 变量的使用 算

grep与正则表达式基础

目录 grep 正则表达式 grep用法简介 我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分. 1 命令:grep 2 格式:grep [option] "pattern" filename 3 选项: 4 -v:反向选择 5 -i:忽略大小写 6 -n:显示行号 7 -c:统计行数 8 -o:仅显示匹配到的字符串 9 -w:匹配整个单词 10 -q:不输出任何信息 11 -A 2:after

Linux Shell常用技巧(三) sed

Linux Shell常用技巧(三) sed 八.流编辑器sed 8.1 sed简介 sed是stream editor的缩写,一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等