每日命令之grep,sed

目录

一,正则表达式简要介绍

1.正则表达式的组成

2.如下讲下正则表达式中的常见meta字符

二,grep命令

options

grep正则表达式元字符集

用于egrep和 grep -E的元字符扩展集

三,sed命令

语法


一,正则表达式简要介绍

每个编程语言都有一套自己的正则库

1.正则表达式的组成

(1).一般字符:没有特殊意义的字符

(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

2.如下讲下正则表达式中的常见meta字符

linux正则表达式一般分为BRE,ERE。前者为基本正则表达式,后者为扩展正则表达式。他们都遵循POSIX规范,POSIX指的是可移植操作系统接口。ERE是BRE的扩展版本,具有更强的处理能力,并且增加了一些元字符。linux grep默认使用BRE,可以通过egrep或者grep -E来开启使用ERE。linux sed使用BRE中的一个子集,主要是为了保证处理的速度和效率。这些内容后续会持续更新。

(1).POSIX BRE与ERE中都有的meta字符:

\ : 通常用于打开或关闭后续字符的特殊含义,如(...)与{...}

. : 匹配任何单个字符(除NUL)

* : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度

^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义

$ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义

[] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,

(2).POSIX BRE中才有的字符:

{n,m} : 区间表达式,匹配在它前面的单个字符重现的次数区别。{n}指重现n次;{n,m}指重现n至m次;

( ) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如(ab).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。

\n : 重复在(与)方括号内第n个子模式至此点的模式。

(3).POSIX ERE中才有的字符:

{n,m} : 与BRE的{n,m}功能相同

+ : 匹配前面正则表达式的一个或多个扩展

? : 匹配前面正则表达式的零个或一个扩展

| : 匹配|符号前或后的正则表达式

( ) : 匹配方括号括起来的正则表达式群

二,grep命令

Linux grep 命令用于查找文件里符合条件的字符串。

options

-a或--text 不要忽略二进制的数据。

-A <显示列数>--after-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之后的内容。

-b或--byte-offset 在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。

-B<显示列数>--before-context=<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前的内容。

-c或--count 计算符合范本样式的列数。

-C<显示列数>--context=<显示列数>-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

-d<进行动作>--directories=<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

-e<范本样式>--regexp=<范本样式> 指定字符串做为查找文件内容的范本样式。

-E或--extended-regexp 将范本样式为延伸的普通表示法来使用。

-f<范本文件>--file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。

-F或--fixed-regexp 将范本样式视为固定字符串的列表。

-G或--basic-regexp 将范本样式视为普通的表示法来使用。

-h或--no-filename 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

-H或--with-filename 在显示符合范本样式的那一列之前,表示该列所属的文件名称。

-i或--ignore-case 忽略字符大小写的差别。

-l或--file-with-matches 列出文件内容符合指定的范本样式的文件名称。

-L或--files-without-match 列出文件内容不符合指定的范本样式的文件名称。

-n或--line-number 在显示符合范本样式的那一列之前,标示出该列的列数编号。

-q或--quiet或--silent 不显示任何信息。

-r或--recursive 此参数的效果和指定“-d recurse”参数相同。

-s或--no-messages 不显示错误信息。

-v或--revert-match 反转查找。

-V或--version 显示版本信息。

-w或--word-regexp 只显示全字符合的列。

-x或--line-regexp 只显示全列符合的列。

-y 此参数的效果和指定“-i”参数相同。

--help 在线帮助。

grep正则表达式元字符集

^ :锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$ :锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

. :匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

:匹配零个或多个先前字符 如:'grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[] :匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^] :匹配一个不在指定范围内的字符,如:'A-FH-Zrep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

.. :标记匹配字符,如'love',love被标记为1。

**<** :锚定单词的开始,如:'<grep'匹配包含以grep开头的单词的行。

**>** :锚定单词的结束,如'grep>'匹配包含以grep结尾的单词的行。

x*{**m*}** :重复字符x,m次,如:'o{5}'匹配包含5个o的行。

x*{m,***}** :重复字符x,至少m次,如:'o{5,}'匹配至少有5个o的行。

x*{m,**n*}** :重复字符x,至少m次,不多于n次,如:'o{5,10}'匹配5-10个o的行。

\w :匹配文字和数字字符,也就是*[A-Za-z0-9]**,如:'G\wp'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W :\w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b :单词锁定符,如: '\bgrepb'只匹配grep。

用于egrep和 grep -E的元字符扩展集

+ :匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

? :匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

a|b|c :匹配a或b或c。如:grep|sed匹配grep或sed

() :分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

x*{m},x{m,},x{m,n}** :作用同x*{m**},x*{m,***},x**{m*,**n*}**

三,sed命令

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

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。

  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

  • -h或--help 显示帮助。

  • -n或--quiet或--silent 仅显示script处理后的结果。

  • -V或--version 显示版本信息。

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

  • d :删除;

  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~

  • s :取代,通常这个 s 的动作可以搭配正规表示法!

#以行为单位的新增/删除
[root@www ~]# nl /etc/passwd | sed '2,5d'
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
​
#以行为单位的替换与显示
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
​
#数据的搜寻并显示
nl /etc/passwd | sed '/root/p' #搜索 /etc/passwd有root关键字的行
​
#数据的搜寻并执行命令
#搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'    
​
#数据的搜寻并替换
[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值