轻松学习之Linux教程六 正则表达式详解

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

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

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

    邮箱: [email protected]

CSDNhttp://blog.csdn.net/u010283694

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

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

一.正则表达式

1.什么是正则表达式

正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就可以用来作为正则表达式的字符串处理之用。例如vi,grep,,awk,sed等工具,因为它们有支持正则表达式

2.语系对正则表达式的影响

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

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

3.基础正则表达式字符(characters)

4.grep,sed使用

语法:

[[email protected] ~]# grep [-A] [-B] [--color=auto] ‘搜寻字符串‘ filename
选项参数: -A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来; --color=auto 可将正确的那个选取数据列出颜色
[[email protected] ~]# 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 为何?
[[email protected] ~]# /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 选取出关键的一行数据
[[email protected] ~]# /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 前面的部分予以删除
[[email protected] ~]# /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 后面的部分予以删除
[[email protected] ~]# /sbin/ifconfig eth0 | grep ‘inet addr‘ | \ > sed ‘s/^.*addr://g‘ | sed ‘s/Bcast.*$//g‘
192.168.1.100

#另一个例子
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[[email protected] ~]# sed -i ‘s/\.$/\!/g‘ regular_express.txt
# 上头的 -i 选项可以让你的 sed 直接去修改后面接的文件内容而不是由屏幕输出喔! 

5.扩展正则表达式

二.文件的格式化及相关处理

1.格式化打印:printf

语法:

[[email protected] ~]# 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] 分隔)
[[email protected] ~]# 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通常的运行的模式是这样的

[[email protected] ~]# awk ‘条件类型1{动作1} 条件类型2{动作2} ...‘ filename

awk内置变量

案例:

[[email protected] ~]# 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

时间: 2024-10-17 06:31:26

轻松学习之Linux教程六 正则表达式详解的相关文章

linux学习之linux的hostname修改详解《转》

linux的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname.也可以直接cat /proc/sys/kernel/hostname查看. #hostname #cat /proc/sys/kernel/hostname 上面两种输出结果相同. 修改运行时Linux系统的hostname,即不需要重启系统 hostname命令可以设置系统的hostname #hostname newname newname即要设置的新的hostname,运行后立即生

Linux学习笔记--Linux文件管理类名利详解

Linux文件管理类命令详解 目录管理: ls.cd.pwd.mkdir.rmdir.tree 文件管理: touch.stat.file.rm.cp.mv.nano 日期管理: touch.clock.hwclock.cal 查看文本: cat.tac.more.less.head.tail cat:连接并显示 -n:在显示时显示每一行的行号 -E:在每行结束处显示 $ Ctrl+C:结束命令 分屏显示: more.less more:向后翻 less: q退出命令 head:查看前n行 ta

轻松学习之Linux教程二 一览纵山小:Linux操作系统详解

本系列文章由@超人爱因斯坦出品,转载请注明出处.         文章链接:          http://hpw123.net/member/index.php?uid=hpw&action=viewarchives&aid=66 作者:超人爱因斯坦    个人网站:http://www.hpw123.net 邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 这篇文章主要是介绍Linux,让大家认识Linux是什么,着

轻松学习之Linux教程五 认识与学习bash

本系列文章由@超人爱因斯坦出品,转载请注明出处.          文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1031/101.html          作者:超人爱因斯坦    个人网站:http://www.hpw123.net     邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 在Linux的环境下,如果你不懂bash是什么,那么其他的东西就不

轻松学习之Linux教程三 玩转Linux常用命令

本系列文章由@超人爱因斯坦出品,转载请注明出处.         文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1025/89.html 作者:超人爱因斯坦    个人网站:http://www.hpw123.net 邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 知道吗?Linux有多种不同的操作方式,图形界面与文字界面,使用命令操作的时候,怎么用这些命令,

轻松学习之Linux教程四 神器vi程序编辑器攻略

本系列文章由@超人爱因斯坦出品,转载请注明出处.           文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1026/93.html          作者:超人爱因斯坦   个人网站:http://www.hpw123.net         邮箱:[email protected]         CSDN:http://blog.csdn.net/u010283694 文本编辑器有很多,比如图形模式的gedit.k

轻松学习之Linux教程二 一览纵山小:Linux操作系统具体解释

本系列文章由@超人爱因斯坦出品,转载请注明出处.         文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1021/70.html 作者:超人爱因斯坦    个人站点:http://www.hpw123.net 邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 这篇文章主要是介绍Linux,让大家认识Linux是什么,着重解说其文件夹树及文件权限: 嘿嘿.

JAVA学习笔记(四十六)- 内部类详解

成员内部类 /* * 内部类 * 定义在另一个类中的类,称为内部类Inner Class * 包含内部类的类,称为外部类Outer Class * * 应用场合:在窗体程序中进行事件处理 * * 分类: * 成员内部类 * 局部内部类 * 静态内部类 * 匿名内部类 * * 成员内部类 * 1.在外部类中访问内部类,可以访问内部类中的所有成员,包含private修饰的 * 2.在外部类外访问内部类,不能访问内部类中的private修饰的成员 * 3.在内部类中访问外部类,直接访问,如果内部类和外

Linux下nginx编译安装教程和编译参数详解

这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # yum install pcre* //如过你已经装了,请跳过这一步 2.安装openssl 需要ssl的支持,如果不需要ssl支持,请跳过这一步 复制代码代码如下: # yum install openssl* 3.gzip 类库安装 复制代码代码如下: yum install zlib zlib-