Shell脚本基础(正则表达式 和 sed基础)

正则表达式

1、什么是正则表达式

Regular Exoress —使用“”一串符号”来描述有共同属性的数据

2、egrep过滤工具(等同于grep -e 用于正则表达式)

  • 文本处理顺序:以行为单位,逐行进行处理。默认只输出与表达式相匹配的文本行。

  • 基本用法:格式1:( egrep [选项]‘正则表达式’ 文件…) 。
    格式2:(前置命令 | egrep [选项] ‘正则表达式’ )

  • 常用参数
    i:忽略字母大小写
    v:条件取反
    c:统计匹配的行数
    q:静默、无任何输出,一般用于检测
    n:显示出匹配结果所在的行号
    color:标出显示匹配字串

3、基本元字符

类型含义示例说明
^匹配行首^abc以abc开头的行
$匹配行尾abc$以abc结尾的行
.单个字符.除换行符(\n)以外的任意单个字符
[root@www sed_test]# egrep '^root' /etc/passwd

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

[root@www sed_test]# egrep -c '/bin/bash$' /etc/passwd
27
类型含义示例说明
+最少匹配一次(abc)+一个或多个连续的abc
最多匹配一次(abc)?0个或一个abc
*匹配任意次数.*任意长度的任意字符串
{n}匹配n次(ab){3}匹配ababab
{n,m}匹配n-m次(ab){1,3}匹配ab,abab,ababab
{,m}匹配至少n次(ab){2,}匹配俩个及以上的ab
示例说明
[alc45_?]匹配a、l、c、4、5、_、?
[a-z]匹配任意小写字母
[A-Z]匹配任意大写字母
[0-9]匹配任意数字
[a-Z0-9]匹配任意字母或数字
[^A-Z]匹配包括非大写字母的行
^ [^a-z]匹配不以小写字母开头的行
类型含义示例说明
( )组合为整体(ab){1,3}匹配ab、abab、ababab
或者root
\b单词边界\broot\b匹配单词root,不匹配keroot等
\ <单词的开头<th匹配以th开头的单词
\ >单词的结束<root<作用与\broot\b相同
\w字母数字下划线\wa匹配xa,不匹配#a
\s匹配空白\sa匹配a,不匹配xa
\d匹配数字-P \da匹配5a,不匹配xa

sed基本用法

1、sed命令解析

· Stream Editor,流式编辑器(非交互,逐行处理,可实现输出,删除、替换、复制、剪切、导入、导出等各种操作)。

  • 命令格式解析
    1、主要用法
    (1) 格式1:前置命令 | sed [选项] ‘编辑指令’
    (2) 格式2:sed [选项] ‘编辑指令’ 文件… …
  • 常用命令选项
    1、-n :屏蔽默认输出(全部文本)
    2、-i :直接修改文件内容
    3、-r :启用扩展的正则表达式,若与其它选项一起使用、应作为首选项。

2、常见处理操作示例

  • 基本的处理动作

常用的动作指令

操作符用途指令示例
p打印行2,4p 2p;4p
d删除行2,4d
s字符串替换s/old/new、s/old/new/3、s/old/new/g
sed '4,7s/^/#/' a.txt  #将第4-7行注释掉
sed 's/xml//g' a.txt #将所有的xml都删除掉

3、sed应用案例

  • 将/var/htmlhtml 修改为/opt/www/html
sed 's#/var/www/html#/opt/www/html#' /etc/httpd/conf/httpd.conf

sed -i “s#$1#$2#” $3
#将 旧内容进行替换,当$1和$2中包含"/"时,
替换指令中的定界符需要更换为其他符号

4、 sed文本块处理

  • sed的文本块处理动作

1、单行文本处理

操作符用途指令示例
i行前插入文本2iYY 在第二行之前插入文本“YY" 、4,7iYY在第4~7行插入YY
a行后插入文本2aYY 在第二行之后添加文本、/^XX/aYY 在以XX开头的行之后添加文本
c替换当前行2cYY 将第二行的内容修改为“YY”

2、多行文本处理

  • 修改后的文本有多行时
    (1)以换行符 \n 分隔
    (2)或者使用 \ 强制换行
sed -n '2cXX\nYY' m.txt

XX
YY
sed -n '2cXX\
> YY' m.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值