随机1(oldboy)

oldboy Linux:

Linux正则表达式与三剑客

  正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。

 Linux三剑客的正则表达式特点:  以行为单位进行操作,每一次仅操作一行;可以将复杂的处理任务化繁为简,提高Linux的效率;仅被三剑客命令支持,其他命令无法使用。

  1.利用命令ipconfig取出IP地址:ifconfig eth0 | sed -rn '2s#^.*inet(.*)net.*$#\1#gp'

正则表达式易混淆事项:

与通配符区别;与开发人员正则不一样,其一般是Perl兼容正则表达式;Linux系统三剑客正则表达式

环境准备:

    执行命令: export  LC_ALL=C    配置后操作时不会出现异常匹配情况

正则表达式分类:

   基本正则表达式:BRE basic regular expression

        对应元字符:^$[].

【 显示行号:cat -n   less -N

 

^  表以什么开头,比如grep "^cd"  表过滤以cd开头的行

$  表以什么结尾   比如grep  "cd$" 表过滤以cd结尾的行

^$  表空白     比如:grep -v "^$"表过滤空白取出没有空白的行(-v表取反,-n列出行号)

.   表匹配任意一个且只有一个字符,与通配符?效果一样。

\   让有意义的字符脱掉马甲,还原本意。 grep "\.$"表以.结尾的行而不是任意一个字符结尾

*   表重复前面字符0次或多次

.*  表所有内容        grep -n ".*"表显示所有内容并打印行号

^.*  匹配任意字符开头的行

.*$  匹配任意字符结尾的行

[abc]  匹配abc任意字符亦可写成[a-c]

[^abc]  匹配不包含abc任意字符的行,^表取反

 

   扩展正则表达式:ERE extended regular expression

        对应元字符:(){}?+|  egrep=grep -E

【-o 可深刻理解

+       匹配一个字符或1次以上多次

[:/]+   匹配括号内的:或\字符一次或1次以上

?       匹配前一个字符0次或1次

|      表 或者 的意思,可同时过滤多个字符串  比如:egrep "a|b" 过滤匹配到a或者b字符的行

a{n,m}  匹配前一个字符最少n次最多m次

a{n,}  匹配前一个字符最少n次

a{n} 匹配前一个字符正好n次

a{,m} 匹配前一个字符最多m次

()  表括起来的是一个整体,可被\n应用,后项应用

\n  后项应用,()\n表取出第n个括号里的内容   (0)(0)\1\2等价于0000   (0)等价于\1

预定义特殊中括号表达式:正则表达式中已经定义好了的,可以直接使用中括号表达式

[:alnum:]  任意匹配一个字母或者数字相当于[a-zA-Z0-9]                             示例:[[:alnum:]]

[:alpha:]  匹配任意一个大小写字母字符相当于[a-zA-Z]                               示例: [[:alpha:]]

[:blank:]  匹配空格与制表符(横向和纵向)                                               示例: [[:blank:]]

[:digit:] 匹配任意一个数字字符相当于[0-9]                                         示例: [[:digit:]]

[:lower:] 匹配小写字母 相当于[a-z]                                                  示例:[[:lower:]]

[:upper:] 匹配大写字母 相当于[A-Z]                                        示例:[[:upper:]]

[:punct:]  匹配标点符号                                      示例:[[:punct:]]

[:space:] 匹配一个包括换行符回车等在内的所有空白字符             示例: [[:space:]]

[:graph:] 匹配任意一个可以看得见的且可以打印的字符               示例: [[:graph:]]

[:xdigit:]  任意一个16进制数即[0-9,a-f,A-F]                              示例:[[:xdigit:]]

[:cntrl:]  任意一个控制字符(ASCII字符集中前32个字符)         示例:  [[:cntrl:]]

[:print:] 任何一个可以打印的字符                  示例:[[:print:]]

 

元字符表达式介绍:是一种Perl风格的正则表达式

\b    匹配单词边界等价于grep-w    例如:\boldboy\b   只匹配oldboy单词不匹配oldboy字符串

\B   匹配非单词边界  例如:oldboy\B 匹配oldboy123中的oldboy不匹配单独的oldboy单词

\w  匹配字母,数字,下划线等价于[[:alnum:]]

\W  匹配字母数字下划线以外的字符等价于[^_[:alnum:]]

\d  匹配单个数字字符,需要使用grep -P才能识别

\D 匹配单个非数字字符,需要使用grep -P才能识别

\s  匹配1位空白字符 ,需要使用grep -P才能识别

\S 匹配1位非空白字符,需要使用grep -P才能识别

 

二。三剑客

grep:擅长过滤查找内容 筛子

             -v :       invert取反;        -i: ignore不区分大小写;

            -n:  number对输出的内容显示源文件 的行号        -w: word按单词为单位过滤

           -o:  只输出匹配的内容       -c:显示过滤的字符串和它之间之后的多少行

        

sed: 流编辑器       擅长取行,替换,删除,追加

功能说明: sed是操作,过滤和转换文本内容的强大工具,对文件实现增删改查。过滤指定字符串和行

语法格式: sed 选项 sed内置命令字符 输入文件

选项: -n:  取消默认sed输出,常与sed内置命令p连用

-i:   直接修改文件内容,而不是输出终端。不加则是修改内存中的数据并不会影响磁盘的文件

-e:  允许多次编辑

内置命令符

s:  替换

g:  global全局替换

a: append表追加文本,在指定行后面添加一行或多行。

d:   delete表示删除匹配行

i:    insert表插入文本,在指定行前插入一行

p:  print表示打印匹配行的内容,通常与-n连用

例子:

   1.打印二三行    sed -n '2,3p' file

   2.过滤含有old字符串的行   sed -n '/old/p' file

   3.删除含有old字符串的行   sed '/old/d' file

   4.将old字符串替换new     sed 's#想替换啥#有啥替换#g' file     (vim中替换:s%/old/new/g)

   5.在file文件第二行追加文本   sed  '2a Linux like linux'  file (插入多行可linux\apache\zabbix)

  6.ifconfig eth0|sed -n 2p | sed 's#^.*inet ##g' | sed 's# netm.*$##g'  优化    ifconfig eth0|sed -ne  's#^.*inet ##g' -e 's# netm.*$##gp'     优化 ifconfig etho | sed -nr '2s#^.*inet (.*) netm.*$#\1#gp'

  7.

 

三剑客老大: awk 是一种编程语言     擅长取列   【cut按列切割,-d指定切割符,-f指定列,多列用,分开,或者n-m】

语法: awk 参数 '条件 {动作}'

参数:  -F   指定分隔符

动作:  列:$1 打印第一列 ;$2 第二列 ; $0  整行;  $NF最后一列; $(NF-1)倒数第二列;$NR 行号   

例子: awk 'NR>1&&NR<4' file 输出第二和第三行内容

           awk '/^[^r]/' file        输出非root的行

          awk '/root/'  file          输出含有root的行

         awk -F ":"  {print NR,$1,$3,$NF}'  file 打印1,3和最后一行并显示行号。

echo 1:-::2==-==::==3==:::==4==:::| awk -F "[:=-]+" '{print $3,$4}'   结果为:3和4     【 [:=-]+ 一堆分割符算一个】

echo ==::--1:-::2==-==::==3==:::==4==:::| awk -F "[:=-]+" '{print $3,$4}'   结果为 2和3

awk -F ":" '$1~/root/ {print $NF}' file  过滤文件中第一行内容匹配root的字符串,把符合的行的最后一列输出 【~表匹配】

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值