轻松学习之Linux教程六 正則表達式具体解释
2015-12-31 12:19
429 查看
本系列文章由@超人爱因斯坦出品。转载请注明出处。
作者:超人爱因斯坦 个人站点:http://www.hpw123.net
文章链接:http://hpw123.net/a/Linux/Linuxjichu/2014/1101/104.html
邮箱: 424346976@qq.com
CSDN:http://blog.csdn.net/u010283694
正則表達式是一些特殊字符的排列,用以查找、替换、删除一些或多行文字字符串。简单的说,正則表達式就是用在字符串的处理上面的一项“表达式”使用它真的非常方便,所以好好学习吧,真的非常实用呢。
好了,让我们进入主题吧:
一.正則表達式
1.什么是正則表達式
正則表達式基本上是一种“表示法”,仅仅要工具程序支持这样的表示法,那么该工具程序就能够用来作为正則表達式的字符串处理之用。
比如vi,grep,,awk,sed等工具,由于它们有支持正則表達式
2.语系对正則表達式的影响
使用正則表達式时。须要特别留意当时环境的语系为何,否则可能会发现与别人不同样的选取结果
因为一般我们在练习正則表達式时,使用的是兼容POSIX的标准,因此就使用“C”这个语系,另外。为了要避免这样编码所造成的英文与数字的选取问题,因此有些特殊的符号我们须要了解,例如以下
3.基础正則表達式字符(characters)
4.grep。sed使用
语法:
5.扩展正則表達式
二.文件的格式化及相关处理
1.格式化打印:printf
语法:
2.awk:好用的数据处理工具
awk也是一个很棒的数据处理工具。相比于sed经常作用于一整行的处理,awk则比較倾向于将一行分成数个“字段"来处理,因此。awk相当适合处理小型的数据数据处理呢,awk通常的执行的模式是这种
案例:
[root@www ~]# last -n 5| awk '{print $1 "\t lines: " NR "\t columes: " NF}'
root lines: 1 columes: 10
root lines: 2 columes: 10
root lines: 3 columes: 10
dmtsai lines: 4 columes: 10
root lines: 5 columes: 9
# 注意喔,在 awk 内的 NR, NF 等变量要用大写,且不须要有 $ 啦![/code]
awk的逻辑运算符(用于条件推断)
——————————超人爱因斯坦于2014年11月01日更新
ok,今天的内容大概就是这些,假设有什么写的不正确的。求大神指正。我们下篇文章见:)
呵呵。让我们轻松一下吧 正能量
很多其它文章尽在:www.hpw123.net
作者:超人爱因斯坦 个人站点:http://www.hpw123.net
文章链接:http://hpw123.net/a/Linux/Linuxjichu/2014/1101/104.html
邮箱: 424346976@qq.com
CSDN:http://blog.csdn.net/u010283694
正則表達式是一些特殊字符的排列,用以查找、替换、删除一些或多行文字字符串。简单的说,正則表達式就是用在字符串的处理上面的一项“表达式”使用它真的非常方便,所以好好学习吧,真的非常实用呢。
好了,让我们进入主题吧:
一.正則表達式
1.什么是正則表達式
正則表達式基本上是一种“表示法”,仅仅要工具程序支持这样的表示法,那么该工具程序就能够用来作为正則表達式的字符串处理之用。
比如vi,grep,,awk,sed等工具,由于它们有支持正則表達式
2.语系对正則表達式的影响
使用正則表達式时。须要特别留意当时环境的语系为何,否则可能会发现与别人不同样的选取结果
因为一般我们在练习正則表達式时,使用的是兼容POSIX的标准,因此就使用“C”这个语系,另外。为了要避免这样编码所造成的英文与数字的选取问题,因此有些特殊的符号我们须要了解,例如以下
3.基础正則表達式字符(characters)
4.grep。sed使用
语法:
# grep [-A] [-B] [--color=auto] '搜寻字符串' filename 选项參数: -A :后面可加数字。为 after 的意思,除了列出该行外,兴许的 n 行也列出来; -B :后面可加数字。为 befer 的意思。除了列出该行外,前面的 n 行也列出来; --color=auto 可将正确的那个选取数据列出颜色[root@www ~]# sed [-nefr] [劢作] 选项參数: -n :使用安静(silent)模式。在一般 sed 的使用方法中,全部来自 STDIN 的数据一般都会被列出到屏幕上。但假设加上 -n 參数后。则仅仅有经过 sed 特殊处理的那一行(或者动作)才会被列出来。 -e :直接在指令列模式上进行 sed 的动作编辑; -f :直接将 sed 的动作写在一个文件内。 -f filename 则能够运行 filename 内的 sed 劢作; -r :sed 的动作支持的是扩展型正則表達式的语法。 (默认是基础正則表達式语法) -i :直接改动读取的文件内容,而不是由屏幕输出。 动作说明: [n1[,n2]]function n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,假设我的动作是须要在 10 到 20 行之间进行的。则『 10,20[动作行为] 』 function 有底下这些咚咚: a :新增。 a 的后面能够接字符串,而这些字符串会在新的一行出现(眼下的下一行)~ c :替换, c 癿后面能够接字符串。这些字符串能够替换 n1,n2 之间的行! d :删除。由于是删除啊。所以 d 后面通常不接不论什么咚咚; i :插入, i 癿后面能够接字符串,而这些字符串会在新的一行出现(眼下的上一行)。 p :打印。也就是将某个选择的数据印出。通常 p 会与參数 sed -n 一起运作~ s :替换。能够直接进行替换的工作哩! 通常这个 s 的动作能够搭配正則表達式!比如 1,20s/old/new/g 就是啦!
案例:
[code]步骤一:先观察原始信息,利用 /sbin/ifconfig 查询 IP 为何?
[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 .....
(下面省略).....
步骤二:利用关键词配合 grep 选取出关键的一行数据
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr'
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
# 当场仅剩下一行!接下l来,我们要将開始到 addr: 通通删除。就是像底下这样:
# inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 # 上面的删除关键在于『 ^.*inet addr: 』啦!正則表達式出现。 ^_^
步骤三:将 IP 前面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | \ > sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
# 细致与上个步骤比較一下,前面的部分不见了!
接下来则是删除兴许的部分,即:
# 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
# 此时所需的正則表達式为:『 Bcast.*$ 』就是啦。
步骤四:将 IP 后面的部分予以删除
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | \ > sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
#还有一个样例
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
# 上头的 -i 选项能够让你的 sed 直接去改动后面接的文件内容而不是由屏幕输出喔!
5.扩展正則表達式
二.文件的格式化及相关处理
1.格式化打印:printf
语法:
# printf '打印格]案列: 将 (printf.txt) 内容仅列出姓名与成绩:(用 [tab] 分隔) [root@www ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt) Name Chinese English Math Average DmTsai 80 60 92 77.33 VBird 75 55 80 70.00 Ken 60 90 70 73.33
2.awk:好用的数据处理工具
awk也是一个很棒的数据处理工具。相比于sed经常作用于一整行的处理,awk则比較倾向于将一行分成数个“字段"来处理,因此。awk相当适合处理小型的数据数据处理呢,awk通常的执行的模式是这种
# awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
案例:
[root@www ~]# last -n 5| awk '{print $1 "\t lines: " NR "\t columes: " NF}'
root lines: 1 columes: 10
root lines: 2 columes: 10
root lines: 3 columes: 10
dmtsai lines: 4 columes: 10
root lines: 5 columes: 9
# 注意喔,在 awk 内的 NR, NF 等变量要用大写,且不须要有 $ 啦![/code]
awk的逻辑运算符(用于条件推断)
——————————超人爱因斯坦于2014年11月01日更新
ok,今天的内容大概就是这些,假设有什么写的不正确的。求大神指正。我们下篇文章见:)
呵呵。让我们轻松一下吧 正能量
很多其它文章尽在:www.hpw123.net
相关文章推荐
- linux下tar命令解压到指定的目录 及其他目录
- CentOS、Ubuntu、Debian三个linux比较异同
- Linux:多个 jdk 的安装和管理 update-alternatives , 或 alternatives
- Linux和Windows生成系统时间命名的文件
- linux常用命令
- centos 6.5安装vncserver 并开启远程桌面
- linux_grub引导修复问题
- 鸟哥的Linux私房菜笔记(二)
- 例解 Linux 下 Make 命令
- linux下软件包的种类和区别
- centos字符集的问题
- archlinux安装 VMware
- Linux FTP 虚拟用户
- linux下解压命令
- linux各文件夹的作用(转)
- linux的cron服务及应用
- centos 7 安装 firewalld
- Linux环境变量的设置和查看方法
- LINUX系统头文件和库文件的搜索路径
- 常用linux命令