Linux正则表达式

1,构成:

一堆特殊符号和字母构成---元字符

2,作用:

通过对文本的内容进行过滤,在对文件中的内容进行过滤

3,正则的种类

  • 基础正则表达式
  • 扩展正则表达式

4,结合三个命令来使用:

  • grep
  • sed
  • awk

5,grep命令

作用:对文件的内容进行过滤

格式:grep 【选项】匹配的内容  文件

选项:

  • -v:取反
  • -o:仅仅显示所匹配的内容
  • -E:使用扩展
  • -i:忽略大小写

例:从a.txt文件中过滤出包含root的行

grep "root" a.txt

例:从a.txt文件中过滤出不包含root的行

grep -v "root" a.txt
例:从 a.txt 文件中过滤出仅仅显示 root 的行
grep -o "root" a.txt
例:统计 a.txt 文件中有多少个 root
grep -o "root" a.txt |wc -w
通配符和正则的区别:
  • 通配符是对文件名进行匹配,正则表达式是对文件中的内容进行匹配
正则中元字符:
1) 匹配单个字符
. 表示任意一个字符(可以空格 逗号 字母 数字 ...
例:匹配 a 前面有一个字符的行
grep ".a" 11.txt

2)[ ] 表示范围内的其中一个

  • [123] 表示匹配1或2或3
  • [0-9] 表示匹配所有的数字
  • [A-Z] 表示匹配所有大写的字母
  • [a-z] 表示匹配所有小写的字母
  • [a-Z] 表示匹配所有字母

例:匹配文件中包含数字的行

grep [0-9] file
例:包含字母 a 的行
grep "a" file

3)用字符集的方式表达

  • [[:space:]] :表示一个空格
  • [[:digit:]] :表示任意一个数字
  • [[:lower:]] :表示任意一个小写字母
  • [[:upper:]] :表示任意一个大写字母
  • [[:alpha:]] :表示任意一个字母
  • [[:alnum:]] :表示任意一个字母+数字
  • [[:punct:]] :表示任意一个标点符号
例:匹配一个包含小写字母的行
grep [a-z] file
grep [[:lower:]] file
4) ^[ ]
例:匹配以 # 开头的行
grep ^[#] file
[^a] 匹配除了 a 以外的任意字符
grep [^a] file
例:过滤没有包含 qaz 的行
grep [^qaz] file
例:过滤出 # 开头后面有一个空格的行
grep "^#[[:space:]]" 11.txt
5) 显示匹配到的行的前的若干行
  • -An:显示匹配到的内容的后n
  • -Bn:显示匹配到的内容的前n
  • -Cn:显示匹配到的内容的前后各n
例:匹配包含 root 的行的前 3
grep -B3 "root" file
6) 次数匹配
  • “*” 前面字符出现了任意次数(0.1.....n
 例:a*
  • ".*" 表示任意长度的任意字符
例: a.*b
grep "a.*b" 11.txt
  • 表示其前面字符出现最多一次
  • a\{m,n\}b                   b前面的a至少出现m次,最多n次
    -E a{m,n}b
    grep -E "a{1,}b" 11.txt     b前面的a至少1次最多不限
    grep -E "a{1,1}b" 11.txt    1次
    grep -E "a?b" 11.txt        1次
7 )位置锚定
  • ^ 表示以n为开头的行
  • $ 表示以n为结尾的行
例:以 yum 为结尾的行
grep "yum$" file
  • \<n 表示单词首部
  • n\> 表示单词尾部
  • ^$ 表示空白行
8 )分组
  • \(     \) 将一个内容当作一个整体看待
例:在 11.txt 中,过滤出出现过俩个相同数字的行
grep "\([[:digit:]]\).*\1" 11.txt

扩展正则表达式:

基础正则: grep [ 选项 ] 匹配内容 文件
扩展:
grep -E 匹配内容 文件
egrep 匹配内容 文件
{1 } 等同 + :其前面的字符至少出现过 1

6,sed命令

格式:
sed [ 选项 ] 操作 目标文件
选项:
  • -i:修改原始文件【如果不加-i,那就是仅仅修改内存中的文件副本】
例:将 1.txt 中的 tom 修改成 jerry
sed -i "s/tom/jerry/g" new.txt

例:将1.txt中/修改成@

sed -i "s#/#@#g" 1.txt

7,awk命令

作用:截取文件中每行的指定的字段
格式:
awk -F " 分隔符 " '{print $ 数字 }' 文件名
awk -F ":" '{print $3}' /etc/passwd
0 输出整条记录
NF 输出最后一个字段
$1: 第一段
$2 :第二段
$3 :第三段
选项:
  • -F "分隔符":用什么字段将这行内容分开成一段一段
例: 仅仅显示 zhangsan uid
awk -F ":" '{print $3}' /etc/passwd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值