本系列文章由@超人爱因斯坦出品。转载请注明出处。

作者:超人爱因斯坦    个人站点:http://www.hpw123.net

         文章链接:http://hpw123.net/a/Linux/Linuxjichu/2014/1101/104.html

    邮箱: 424346976@qq.com

CSDNhttp://blog.csdn.net/u010283694

正則表達式是一些特殊字符的排列,用以查找、替换、删除一些或多行文字字符串。简单的说,正則表達式就是用在字符串的处理上面的一项“表达式”使用它真的非常方便,所以好好学习吧,真的非常实用呢。

好了,让我们进入主题吧:

一.正則表達式



1.什么是正則表達式

正則表達式基本上是一种“表示法”,仅仅要工具程序支持这样的表示法,那么该工具程序就能够用来作为正則表達式的字符串处理之用。

比如vi,grep,,awk,sed等工具,由于它们有支持正則表達式

2.语系对正則表達式的影响

使用正則表達式时。须要特别留意当时环境的语系为何,否则可能会发现与别人不同样的选取结果

因为一般我们在练习正則表達式时,使用的是兼容POSIX的标准,因此就使用“C”这个语系,另外。为了要避免这样编码所造成的英文与数字的选取问题,因此有些特殊的符号我们须要了解,例如以下

3.基础正則表達式字符(characters)

4.grep。sed使用

语法:

[root@www ~]# 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 就是啦!

案例:

步骤一:先观察原始信息,利用 /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

语法:

[root@www ~]# printf '打印格式' 实际内容
选项參数:
关于格式方面的几个特殊样式:
\a 警告声音输出
\b 退格键(backspace)
\f 清除屏幕 (form feed)
\n 输出新的一行
\r 即 Enter 按键
\t 水平的 [tab] 按键
\v 垂直的 [tab] 按键
\xNN NN 为两位数的数字,能够转换数字成为字符。 关于 C 程序语言内。常见的变量格式
%ns 那个 n 是数字, s 代表 string 。即多少个字符。
%ni 那个 n 是数字, i 代表 integer 。即多少整数字数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点)。假设有小数字数, 假如我共要十个位数,但小数点有两位,即为 %10.2f 啰!

案列:

将 (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通常的执行的模式是这种

[root@www ~]# awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

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 等变量要用大写,且不须要有 $ 啦!

awk的逻辑运算符(用于条件推断

  ——————————超人爱因斯坦于2014年11月01日更新

ok,今天的内容大概就是这些,假设有什么写的不正确的。求大神指正。我们下篇文章见:)

呵呵。让我们轻松一下吧    正能量

很多其它文章尽在:www.hpw123.net




轻松学习之Linux教程六 正則表達式具体解释的更多相关文章

  1. 鸟书shell 学习笔记(二) shell中正則表達式相关

    通配符与正則表達式的差别 通配符是bash原生支持的语法,正則表達式是处理字符串的一种表示方式, 正則表達式须要支持的工具支持才干够 语系设置 : export LANG=C grep alias 设 ...

  2. 使用正則表達式的格式化与高亮显示json字符串

    使用正則表達式的格式化与高亮显示json字符串 json字符串非常实用,有时候一些后台接口返回的信息是字符串格式的,可读性非常差,这个时候要是有个能够格式化并高亮显示json串的方法那就好多了,以下看 ...

  3. JavaScript正則表達式知识汇总

    Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegE ...

  4. vim中使用正則表達式

    一.使用正則表達式的命令 使用正則表達式的命令最常见的就是 / (搜索)命令. 其格式例如以下: /正則表達式 还有一个非常实用的命令就是 :s(替换)命令,将第一个//之间的正則表達式替换成第二个/ ...

  5. python re 正則表達式

    夜深了.敲击键盘.用CSDN整理下python   re 正則表達式是含有文本和特别字符的字符串,这些文本和特别字符描写叙述的模式能够识别各种字符串. 一下我们从实例结合理论来学习理解吧... 经常使 ...

  6. Python——正則表達式(2)

    本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ======================== ...

  7. 轻松学习JavaScript十四:JavaScript的RegExp对象(正則表達式)

    一RegExp对象概述 RegExp对象表示正則表達式,RegExp是正則表達式的缩写.它是对字符串运行模式匹配的强大工具. RegExp 对象用于规定在文本中检索的内容. 当您检索某个文本时.能够使 ...

  8. JAVA学习第六十五课 — 正則表達式

    正則表達式:主要应用于操作字符串.通过一些特定的符号来体现 举例: QQ号的校验 6~9位.0不得开头.必须是数字 String类中有matches方法 matches(String regex) 告 ...

  9. python 学习笔记 10 -- 正則表達式

    零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...

随机推荐

  1. paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

    源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...

  2. 一百多道.NET面试题!

    1.a=10,b=15,在不用第三方变量的前提下,把a,b的值互换 方法一: a=a+b;  b=a-b;  a=a-b;  方法二: a^=b^(b^=a^b);  2.已知数组int[] max= ...

  3. TCP/IP协议的编写《转载》

    基于HHARM9-EDU的TCP/IP(UDP)协议的实现 原文网址:http://blog.csdn.net/lhj0503/article/details/3323788 摘 要:嵌入式技术的发展 ...

  4. hdc和hwnd的区别

    句柄概念在WINDOWS编程中是一个很重要的概念,在许多地方都扮演着重要的角色.但由此而产生的句柄概念也大同小异,比如:<<Microsoft   Windows   3   Develo ...

  5. OpenVPN多处理之-netns容器与iptables CLUSTER

    假设还是沉湎于之前的战果以及强加的感叹,不要冥想,将其升华. 1.C还是脚本 以前,我用bash组织了复杂的iptables,ip rule等逻辑来配合OpenVPN,将其应用于差点儿全部能够想象得到 ...

  6. PostgreSQL的备份与还原

    导出: cmd,然后一直cd,到PostgreSQL的bin下面,用其pg_dump程序: pg_dump -h localhost -U ivms864013 ivms864013 > G:\ ...

  7. ASP.NET - 分页

    效果: SQL-存储过程(Paging): ROW_NUMBER() over(order by MessageDateTime desc)  其中的 MessageDateTime desc 代表的 ...

  8. alv行可编辑时带出描述

    ALV显示可以编辑的状态下可以带出描述信息等,比如维护表程序输入公司代码时需要带出公司代码的描述,这时就需要通过下面事件来触发 定义一个类: CLASS lcl_event_receiver DEFI ...

  9. MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!

    Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My ...

  10. 查看进程所用的内存(使用GetWindowThreadProcessId取得进程ID,OpenProcess打开进程和GetProcessMemoryInfo取得内存信息)

    // function GetProcessMemorySize(_sProcessName: string; var _nMemSize: Cardinal): Boolean; var l_nWn ...