`

linux命令的正则表达式

阅读更多

linux的命令行可以胜任所有的工作,这和ms的产品有着很大的区别,到现在为止仍然有很多的爱好者对敲键盘乐此不疲,而在繁重的管理工作和键盘工作中,正则表达式对于简化工作起到了很大的作用。
Perl regular expressions man page.
http://www.perldoc.com/perl5.8.0/pod/perlre.html
一、正则表达式简介
事实上,正则表达式不仅适用于linux,多种编程语言中也可以使用到它,因为它实际上是人们对于某种规律的表达方式。
如果要把他的所有应用都讲上的话那这篇文章会变的太长以至于无法阅读,我只介绍他在linux下和几种最重要的命令的搭配使用。
基本的元字符集:
^行首
$行尾
*匹配星号前的字符一次或多次
[]匹配[]内的字符,可以是一个字符也可以是字符列
\用来屏蔽一个元字符的特殊含义,可以使其失去原有的意义。
pattern\{n\}用来匹配前面pattern出现的次数。n为次数。
而其中使用最多的是行首和行尾,无论在任何地方都可能会用到它们,比如vi,你输入$,就可以跳到行尾,在bbs上,你也可以输入$,直接跳到这个版的最后的一篇文章。
后面所说的将是他们的和具体命令结合的例子。
二、grep 和正则表达式
grep是个非常常用的工具,linux其实和internet一样,都是一个充满了大量信息、数据的东西,如何有效的过滤自己不用的信息、获取有用的信息反映了一个人水平的高低,当我还是linux新手的时候还不懂得用grep呢。
一个最简单的应用例子就是如何查看一个目录里只查看文件夹了,ls并没有提供这样的参数给你,而是需要你用grep(或后面提到的awk)来实现这样的功能。我们知道一个文件夹的属性为dxxx,所以我们可以用ls -l |grep ^d,即打印匹配行首第一个字母为d的项目,这样就把所有的文件夹打印出来而忽略其他非文件夹的文件了,举一反三,我们可以用来匹配所有的权限,比如我想找到所有权限为rwx------的文件,这样我们就可以输入ls -l|grep ^.rwx,其中.号为匹配任意一个字符。再看下面的例子,想找权限为----rw----的文件,可以使用ls -l|grep ^....rw....,怎么样,这样简单多了吧,我们还可以寻找所有以*号结尾的文件(在某些linux上用它来代表可执行文件)即ls |grep \*$,要注意的是必须加\以屏蔽*号的原来的特殊意义,而$号是加在行尾的。
可以用^符号来再非正则表达式的意思(即否定)如前面我说了要看文件夹,那么如果我想看不是文件夹的文件怎么办 : ls -l|grep ^[^d],这样的意思就是说查看所有行首不为d字母的项,当然也可以用grep 的-v选项实现同样功能。不过今天重点是说正则表达式,所以就不讲参数了。
我还可以查找多个文件,如有一个目录里面有我需要的内容,我只知道他在某个.doc文件里头,我可以用grep "表达式" *.doc,而这个表达式就需要你去想了,有多种方法可以指定模糊的表达式,如k...D,代表以小写字母k开头,中间三个是任意字符而以大写字母D结尾的字符串,而k*D,则表达以k开头中间可以是任意长度任意字符的而以D结尾的字符串,还可以用[]指定范围,如[12345]day,指的是以1到6中任意一个字符开头后面是day的字符串,像3day就匹配这个表达式而13day就不匹配。[Ss]可以指定以大写S或者小写s的字符,而像结合pattern\{n\}还可以用更奇妙的用法,我就不多说了。
三、awk和正则表达式
awk对于从大的数据文件中抽取指定的数据包十分有用,比如你可以用他来管理passwd文件,或者是日志文件(相当巨大的文件,而用了awk就会变的很轻松了),通常awk都是和grep结合来用的,又grep抽出行,再有awk抽出行中指定的列,不过就算单独用awk也一样好用。请看看这样的例子
awk -F: '{if($6 ~ /bash/) print $0}' /etc/passwd
这是个相当复杂的例子,我举这个例子的目的只是为了说明结合命令语法和正则表达式可以实现相当强的过滤作用,这个命令的作用是从passwd文件中的第六列中抽取所有含有bash的项目然后在打印这些项目的第一项即他们的用户名。我假设passwd为这样的内容
root:*:*:*:*:*:/bin/bash
user:*:*:*:*:*:/bin/bash
xie:*:*:*:*:*:/bin/csh
ftp:*:*:*:*:*:/bin/zsh
那么输出就应该为
root
user
我们逐个来分析,首先 -F:指定:为分隔符,因为默认的分隔符是空格,然后我们用一个假设语句,因为假设语句和后面的print组合成一个动作,所以必须用花括号括起来,意思是如果(if)第六列($6)匹配(~)字符串bash,那么打印(print)第零列($0)。其中/bash/指的是匹配bash,//只是起括起来的作用,并不参与判断。
awk有自己的正则表达式和条件操作符,他比一般的正则表达式要多出两个元字符,就是+和?,+使用匹配一个或多个字符。?匹配模式出现频率,例如使用/XY?Z/匹配XYZ,或YZ。条件操作符有
=大于等于
~匹配正则表达式
!~不匹配正则表达式
结合以上表达式,还可以作出更多的动作,如
ls -l|awk 'BEGIN {print "Name\t SIZE"} {if /^[^d]/} {print $9 "\t" $5} {tot+=5} END {print "total KB:"tot}'
可以用此表达式来打印文件名几其长度,然后输出所有文件加起来的大小。
他相当与于我前面所说的先找出不是文件夹的文件,然后打印他们的大小和长度,把这些大小值放入变量tot中,放一次加一次(+=),最后打印tot,就可以把所有文件的大小求出来了。
逻辑符号
&& AND,必须同时为真
! 非,求逆
awk '{if ($3=="root" && $5="/root") print $0}' /etc/passwd
当组和个人目录都为root的时候打印用户的名字。
嘿嘿,事实上awk还有算术操作符呢,我为了偷懒就不写了,不过上面已经有例子了(用了+=),就留给大家慢慢研究吧。
四、VI和正则表达式
文书编辑更加用用到正则表达式了,比如说在编辑状态下输入^,可以跳到行中第一个非空字符,输入$,可以跳到本行行尾(在行号表示的时候,$代表最后一行)。输入/可以搜索字符串,同样可以使用正则表达式匹配,如/^str,则匹配行首的str,输入/str$,则匹配行尾的str。其他的和正则表达式方法一样。
五、总结
linux还有更复杂的sed也会用到正则表达式,事实上大部分和信息过滤有关的都离不开他,不过小子才疏学浅,实在是写不了了,仅以此文抛砖引玉,不过各位大侠可千万别因为我这篇文章写的差而全把砖头往我招呼啊……
还有一点是给初学者的:记得多用|管道和文件操作符啊,0代表标准输入、1代表标准输出、2代表错误输出,其他还有3-9你是可以任意使用的,如可以先把某文件指到操作符4,再把4指向0,那么就可以作为程序的输入了。

 

分享到:
评论

相关推荐

    linux系统shell正则表达式-练习工具和教材

    在Linux Shell环境中,正则表达式常与grep、sed、awk等命令结合使用,以实现高效的数据筛选和处理。 1. 元字符:正则表达式的核心是元字符,它们具有特殊的含义。例如,`.`表示任意单个字符,`^`表示行首,`$`表示...

    [c++]获取linux命令返回, 并通过正则表达式过滤字符串

    本篇文章将深入探讨如何在C++中获取Linux命令的返回结果,并使用正则表达式来过滤这些字符串。这一过程涉及到的知识点包括C++的进程控制、字符串处理以及正则表达式的应用。 首先,让我们关注如何在C++中执行Linux...

    Linux在合集中使用正则表达式来匹配查找.zip

    综上所述,这个压缩包文件合集详细地介绍了Linux环境中如何使用正则表达式进行文本匹配和处理,涵盖了正则表达式的基础知识、sed工具的使用以及grep系列命令的应用。掌握这些内容,将极大地提高你在Linux系统中处理...

    Linux中几个正则表达式的用法.doc

    在Linux系统中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能通过预定义的模式匹配和处理文本数据。以下将详细介绍文件标题和描述中涉及的几个Linux正则表达式用法: 1. **查找IPv4地址**: ...

    Tcl/tk 宝典之二 - 正则表达式参考

    * 正则表达式不仅用于程序开发,还广泛应用于 Unix/Linux 系统管理中 知识点二:正则表达式的基本概念 * 正则表达式是利用 26 个英文字符与一些特殊符号的配合来进行文字内容比对的方法 * 正则表达式中,26 个英文...

    linux shell正则表达式

    Linux Shell中的正则表达式是文本处理和搜索的关键工具,尤其在使用命令行工具如grep、sed和awk时。它们允许我们以灵活的方式查找、替换和解析文本模式。以下是正则表达式的基本概念、分类以及在Linux常用文本工具中...

    正则表达式之道.rar

    例如,Perl和JavaScript的正则表达式支持不同的语法特性,而grep和sed命令在Linux/Unix环境中提供了命令行的正则处理功能。理解这些工具之间的异同,可以帮助你在不同环境下灵活运用正则表达式。 "aspsun....

    在Linux下正则表达式和grep命令的使用

    在深入探讨Linux下的正则表达式(Regular Expression,简称RE)和`grep`命令之前,我们首先需要理解正则表达式的基本概念及其在系统管理与日常应用中的重要性。 ### 正则表达式:理解与应用 正则表达式是一种用于...

    正则表达式大全(超好)

    4. **vi/vim**:vi编辑器中的替换命令`:%s/pattern/replacement/g`允许用户使用正则表达式进行全局替换。 5. **Editplus**:在文本编辑器Editplus中,正则表达式可以用于查找和替换功能,提高文本处理效率。 三、...

    linux 常用正则表达式

    例如,使用`grep`命令结合正则表达式可以找出文件中符合特定模式的行,而`sed`则可以进行更复杂的字符串替换操作。 在编程语言中,如Python、Perl、JavaScript等,正则表达式也是字符串处理的核心部分,它们提供了...

    linux shell 正则表达式(BREs,EREs,PREs)差异比较.docx

    在Linux shell中,正则表达式主要有三种类型:基本正则表达式(Basic Regular Expressions,BREs)、扩展正则表达式(Extended Regular Expressions,EREs)和Perl正则表达式(Perl Regular Expressions,PREs或pcre...

    linux shell 正则表达式

    在Linux Shell中,正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作。它们允许用户通过使用特定的模式来搜索文本,这些模式可以描述一系列的字符序列。在Shell脚本中,正则表达式常用于`grep`, `sed...

    正则表达式支持库2.0#0版(静态版)

    注意,本支持库中的所有命令均为高级命令,要求使用者具有一定的正则表达式知识基础。易语言RegEx_static.lib支持库为易语言静态支持库,需要易语言系统5.0版本的支持,需要易语言系统核心支持库5.0版本的支持,提供...

    shell命令处理过程正则表达式

    结合标题"shell命令处理过程正则表达式",我们可以深入探讨如何在Shell环境中使用正则表达式来处理命令和文本。 首先,理解Shell环境变量至关重要。环境变量是在系统启动或Shell启动时设定的一系列参数,它们存储着...

    Linux常用命令和管理03-grep及正则表达式1

    本文将详细介绍 Linux 中的 grep 命令和正则表达式的使用,涵盖变量类别、Bash 配置文件、计算机理解、编程语言、Bash 编程、文件搜索、grep 命令、正则表达式、基本正则表达式的元字符、次数匹配、位置锚定、分组、...

    正则表达式支持库2.0#0版

    注意,本支持库中的所有命令均为高级命令,要求使用者具有一定的正则表达式知识基础。易语言RegEx.fnr,RegEx.fne支持库为一般支持库,需要易语言系统3.8版本的支持,需要易语言系统核心支持库3.7版本的支持,提供了2...

    在Linux下正则表达式和grep命令的使用.pdf

    在Linux下正则表达式和grep命令的使用.pdf

    Linux正则表达式技术指南

    ### Linux正则表达式技术指南 #### 正则表达式基础与应用场景 在Linux系统中,正则表达式(Regular Expression)是一种强大的文本处理工具,它可以帮助用户进行精确的字符串匹配、查找、替换等操作。正则表达式...

Global site tag (gtag.js) - Google Analytics