InfoQ_ Linux_Unix工具与正则表达式的POSIX规范

合集下载

Linux命令集锦之·正则表达式

Linux命令集锦之·正则表达式

Linux命令集锦之·正则表达式时间:2018-11-15 记录:byzqy正则表达式与通配符:正则表达式,⽤来在⽂件中匹配符合条件的字符串,正则是包含匹配。

grep、awk、sed 等命令可以⽀持正则表达式。

通配符,⽤来匹配符合条件的⽂件名,是完全匹配。

ls、find、cp 这些命令不⽀持正则表达式,所以只能使⽤shell⾃⼰的通配符来进⾏匹配了。

通配符:*(星号),代表任意字符重复任意多次;?(问号),代表任意字符重复⼀次;[](中括号),代表⼀个字符即中括号中写的字符;⽰例:在anaconda-ks.cfg这个⽂件当中搜索size这个字符串$ grep "size" anaconda-ks.cfg注意:正则表达式中有⼀些符号和通配符⼀样,但是含义完全不同。

基础正则表达式:⽰例:星号(*)前⾯⼀个字符匹配0次,或任意多次$ grep "a*" test_rule.txt# 匹配所有内容,包括空⽩⾏;$ grep "aa*" test_rule.txt# 匹配⾄少包含有⼀个a的⾏;$ prep "aaa*" test_rule.txt# 匹配最少包含两个连续a的字符串;$ grep "aaaaa*" test_rule.txt# 匹配最少包含4个连续a的字符串。

⽰例:点号(.)匹配除了换⾏符外的任意⼀个字符$ grep "s..d" test_rule.txt# “s..d”会匹配在s和d这两个字母之间⼀定有两个字母的单词;$ grep "s.*d" test_rule.txt# 匹配在s和d字母之间有任意字符;$ grep ".*" test_rule.txt# 匹配所有内容。

⽰例:尖号(^)匹配⾏⾸,美元符($)匹配⾏尾$ grep "^M" test_rule.txt# 匹配以⼤写“M”开头的⾏;$ grep “n$” test_rule.txt# 匹配以⼩写“n”结尾的⾏;$ grep -n "^$" test_rule.txt# 会匹配空⽩⾏。

posix规范

posix规范

posix规范POSIX(可移植操作系统接口)是一种标准化的操作系统接口,其设计目标是为了提供一个应用程序与操作系统之间的可移植性。

POSIX标准于1988年由IEEE(电气和电子工程师协会)制定,并成为ISO(国际标准化组织)的国际标准。

POSIX规范的最新版本是2017年发布的POSIX.1-2017。

POSIX规范定义了一组标准的系统调用接口、库函数接口和命令行工具,以及应用程序可以使用的标准头文件。

这些接口和工具涵盖了操作系统的各个方面,如进程管理、文件系统、输入输出、网络通信等。

POSIX规范还定义了一组环境变量和配置文件,用于控制系统的行为。

POSIX规范的主要优势是提供了跨平台的可移植性。

通过依赖POSIX接口,应用程序可以在不同的操作系统上编译和运行,而无需进行大量的修改。

这为开发人员提供了更大的灵活性和便利性,可以更轻松地将应用程序移植到不同的平台上,并且在不同的平台上共享或重新使用代码。

POSIX规范还促进了互操作性。

由于POSIX定义了一个通用的操作系统接口,不同的操作系统可以共享和交换应用程序、库和工具。

这使得不同的开发者可以合作开发和维护跨平台的应用程序和系统工具,从而提高了软件生态系统的健康程度。

虽然POSIX规范的标准化使得应用程序的可移植性变得更加容易,但它也有一些限制和局限性。

首先,POSIX规范不能解决所有的跨平台问题。

一些操作系统的特定功能和特性可能无法在POSIX接口中找到相应的替代品,因此在移植应用程序时仍然可能需要进行一些修改和调整。

其次,不同的操作系统对POSIX规范的实现可能存在一些细微的差异,这可能导致在不同的平台上出现一些不一致的行为或性能差异。

总体而言,POSIX规范在提供可移植性和互操作性方面具有重要意义。

它为开发人员提供了一个通用的操作系统接口和一套标准工具,可以让他们更方便地开发、测试和维护跨平台的应用程序。

虽然在实践中可能会遇到一些限制和挑战,但POSIX仍然是开发人员在编写可移植软件时的重要指南之一。

Linux系统编程中的POSIX标准

Linux系统编程中的POSIX标准

Linux系统编程中的POSIX标准Linux系统编程在很长一段时间内一直在不断发展,随着POSIX标准的出现,Linux系统在该方面得到了全面的支持。

POSIX标准使得不同的Unix系统和其他操作系统之间的可移植性得到了很大的提高,这是Linux系统编程所必需的。

什么是POSIX?POSIX(Portable Operating System Interface,可移植操作系统接口)是由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师学会)开发的一系列接口标准。

1990年,IEEE 正式颁发了POSIX标准的第一个版本,这个标准定义了许多操作系统接口的规范性要求,使得Unix的不同版本之间的软件可以轻松地进行移植。

POSIX标准的主旨是定义一组标准操作系统接口,使得应用程序的可移植性更好。

POSIX标准定义了一组与操作系统交互的API,包括文件操作、进程管理、信号传递等等。

POSIX标准在Linux中的应用在Linux系统中,POSIX标准已经得到了广泛的应用。

许多Linux上的C库都以POSIX标准为基础进行开发,例如glibc、bionic等等。

这些C库包含了POSIX标准中定义的一系列API,并提供了一些额外的功能。

开发者在编写应用程序时,可以使用这些API,从而使得应用程序更加规范,并且在其他系统上的移植性更好。

POSIX标准还提供了一个实现的方式,也就是POSIX兼容层。

POSIX兼容层是一个在Linux内核中的模块,它提供了一些非标准的API,这些API能够向后兼容POSIX标准。

这个兼容层让系统具有了更好的兼容性,比如在系统上运行一些遵循POSIX标准的旧应用程序时,可以使用这些非标准API进行支持。

在Linux系统中,可以使用一些工具来检查应用程序是否严格遵循了POSIX标准。

例如lint和splint工具,它们可以自动分析源代码,并提供一些有用的警告信息和其他功能。

UNIX下的正则表达式

UNIX下的正则表达式

UNIX下的正则表达式(Regular Expression)(初2002年3月12日,最后修改:2002年3月26日 ,修改次数:21 蓝飞鸟)让我们来看一个命令,用ls命令列出目录:ls -l |grep ^d初学Linux的朋友,明白ls和DOS的DIR是意思相差不多,但是如果没弄明白Regular Expression,就只会觉得UNIX下的命令太复杂,而不会享受到UNIX的命令的强大。

象这个命令:ls -l |grep ^d 就运用了|(管道)、grep(搜索)和正则表达式,而要看懂这个命令,关键的还在正则表达式。

正则表达式就是regular expression,从英文翻译过来常有多种译法,因此regular expression 还有别的叫法,如规则表达式、文字匹配模式,一般来说是在使用grep搜索,sed和awk语言时列出或者匹配字符串的一种办法。

值 得注意的正则表达式看起来颇象一些命令的文件名匹配模式,如find,实际上,正则表达式与文件名匹配模式不同。

在UNIX中,正则表达式是由一个或多个 字符和meta字符组成的字符串,把正则表达式与数据源进行匹配之前,程序自动把它展开变为规定的模式,然后一个字符一个字符的进行比较。

我查了一下帮助资料,目前regular expression有两种形式,一种是现代的(POSIX 1003.2叫这种为扩展的regular expression),另一种是老的(基本regular expression)形式,我这里讲的完全针对现代形式,如egrep的regular expression(以下简称RE),因为以前的基本RE 只保留在那些向后兼容老程序中。

UNIX有很多地方会用到正则表达式,在大文件中查找符合条件的字符串或SHELL编程中,要想把自己的想法贯彻给UNIX,非得熟练运用RE不可,搞不 清楚RE,在UNIX中,无异于背着肥马爬行,既觉得处处不方便,做甚麽事都碍手碍脚,又浪费时间体力。

正则表达式的POSIX规范

正则表达式的POSIX规范

Linux/Unix工具与正则表达式的POSIX规范内容来源于更多内容请查看网站对正则表达式有基本了解的读者,一定不会陌生『\d』、『[a-z]+』之类的表达式,前者匹配一个数字字符,后者匹配一个以上的小写英文字母。

但是如果你用过vi、grep、awk、sed之类Linux/Unix下的工具或许会发现,这些工具虽然支持正则表达式,语法却很不一样,照通常习惯的办法写的『\d』、『[a-z]+』之类的正则表达式,往往不是无法识别就是匹配错误。

而且,这些工具自身之间也存在差异,同样的结构,有时需要转义有时不需要转义。

这,究竟是为什么呢?原因在于,Unix/Linux下的工具大多采用POSIX规范,同时,POSIX规范又可分为两种流派(flavor)。

所以,首先有必要了解一下POSIX规范。

POSIX规范常见的正则表达式记法,其实都源于Perl,实际上,正则表达式从Perl衍生出一个显赫的流派,叫做PCRE(Perl Compatible Regular Expression),『\d』、『\w』、『\s』之类的记法,就是这个流派的特征。

但是在PCRE之外,正则表达式还有其它流派,比如下面要介绍的POSIX规范的正则表达式。

POSIX的全称是Portable Operating System Interface for uniX,它由一系列规范构成,定义了UNIX操作系统应当支持的功能,所以“POSIX规范的正则表达式”其实只是“关于正则表达式的POSIX规范”,它定义了BRE(Basic Regular Expression,基本型正则表达式)和ERE(Extended Regular Express,扩展型正则表达式)两大流派。

在兼容POSIX的UNIX系统上,grep和egrep之类的工具都遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。

BRE在Linux/Unix常用工具中,grep、vi、sed都属于BRE这一派,它的语法看起来比较奇怪,元字符『(』、『)』、『{』、『}』必须转义之后才具有特殊含义,所以正则表达式『(a)b』只能匹配字符串(a)b而不是字符串ab;正则表达式『a{1,2}』只能匹配字符串a{1,2},正则表达式『a\{1,2\}』才能匹配字符串a或者aa。

posix 正则表达式

posix 正则表达式

posix 正则表达式
POSIX 正则表达式是一种用于匹配文本模式的表达式。

POSIX 表示可移植操作系统接口,所以POSIX 正则表达式是符合POSIX 标准的正则表达式语法。

以下是一些POSIX 正则表达式的基本语法:
1. 字符匹配:
- .:匹配任意一个字符。

- []:匹配括号内的任意一个字符。

- [^]:匹配除了括号内的字符以外的任意一个字符。

2. 重复匹配:
- *:匹配前面的字符重复零次或多次。

- +:匹配前面的字符重复一次或多次。

- ?:匹配前面的字符零次或一次。

- {n}:匹配前面的字符恰好n 次。

- {n,m}:匹配前面的字符n 至m 次。

- {n,}:匹配前面的字符至少n 次。

3. 边界:
- ^:匹配行首。

- :匹配行尾。

4. 特殊字符:
- \d:匹配任意一个数字字符。

- \s:匹配任意一个空白字符。

- \w:匹配任意一个字母数字字符。

以上是POSIX 正则表达式的基本语法,常用于grep 等命令中的文本搜索和查询。

posix标准

posix标准

posix标准POSIX标准。

POSIX(Portable Operating System Interface)是一个由IEEE制定的一种UNIX操作系统的标准。

它的目的是为了确保不同的UNIX操作系统之间的兼容性,使得软件能够在不同的UNIX系统上移植和运行。

POSIX标准定义了一系列操作系统接口,包括文件操作、进程控制、系统调用等,以及一些工具和接口的规范。

POSIX标准的制定是为了解决UNIX系统之间的兼容性问题。

在早期,不同厂商的UNIX系统存在着各自的特性和接口,导致软件无法在不同的UNIX系统上移植和运行。

为了解决这一问题,IEEE制定了POSIX标准,统一了UNIX系统的接口和规范,使得软件能够在不同的UNIX系统上运行。

POSIX标准包括了一系列的接口和规范,其中最重要的是POSIX.1标准,它定义了基本的系统接口,包括文件操作、进程控制、信号处理等。

此外,还有POSIX.2标准定义了一些扩展的系统接口,包括正则表达式、Shell命令解释器等。

另外还有一些其他的POSIX标准,如POSIX.3、POSIX.4等,它们分别定义了一些特定的系统接口和规范。

POSIX标准的制定对于UNIX系统的发展起到了重要的推动作用。

它使得不同的UNIX系统之间能够保持兼容性,使得软件开发人员能够更加方便地开发和移植软件。

同时,POSIX标准也促进了UNIX系统的普及和发展,使得UNIX系统成为了当今世界上最重要的操作系统之一。

总的来说,POSIX标准是UNIX系统的基础,它定义了UNIX系统的接口和规范,保证了不同UNIX系统之间的兼容性,推动了UNIX系统的发展和普及。

在今后的发展中,POSIX标准仍然会起到重要的作用,它将继续影响着UNIX系统的发展方向,推动着UNIX系统的不断进步和发展。

关于POSIX标准

关于POSIX标准

关于POSIX标准对中国 Linux 标准战略与战术的思考国家软件与集成电路公共服务平台技术总监陈伟博士“制订标准” 现在已经成为了一个时髦的词,而有关各种标准的消息,也不断充斥耳畔,这也昭告了“标准时代” 的来临。

生于田野,长于社会,不拘小节的小企鹅Linux 也未能免俗,各种Linux 标准也纷至踏来,这就是“成长的烦恼”吧!而制订 Linux 标准正逐步成为我国标准战略的一个重要组成部份。

同样是制订标准,小企鹅的出生、成长方式、生存模式以及“它”和我们的相互认知度都对我们制订 Linux 标准有着重要的影响。

“标准”真的万能吗?认为只要制定了Linux 国家标准,Linux 就可以走上发展的康庄大道,这是一种错误也不现实的理解。

而在当前标准战略的大潮中,其实对Linux 真是“爱它并不容易”,因而在制订Linux 标准的过程中,需要有更多的耐心和技巧,要做的事还很多。

国际 Linux 的标准体系1.POSIX标准POSIX(Portable Operating System Interface for Computing Systems)是由 IEEE 和 ISO/IEC 开发的标准系统。

该标准是基于现有的 Unix 实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。

1991-1993 年Linux 刚起步时,适逢POSIX 标准的制定正处在最后定稿的时候,POSIX 标准为Linux 提供了极为重要的信息,使得Linux 能够与绝大多数 Unix 系统兼容。

POSIX 目前的最新标准是 IEEE 1003.1-2001。

在最初的 Linux 内核代码中(0.01 版、0.11 版)就已经为 Linux 与POSIX 标准的兼容做好了准备。

通过对0.01 版的内核/include/unistd.h 文件的分析就可见,Linux 在发展初期就想实现与POSIX的兼容。

unix系统 文件夹的正则

unix系统 文件夹的正则

unix系统文件夹的正则
在Unix系统中,可以使用正则表达式来匹配文件夹名称。

以下是一些常用的正则表达式用法:
1. 匹配以特定字符串开头的文件夹:
prefix
示例:匹配以"abc"开头的文件夹:abc
2. 匹配以特定字符串结尾的文件夹:
suffix$
示例:匹配以"xyz"结尾的文件夹:xyz
3. 匹配包含特定字符串的文件夹:
keyword
示例:匹配包含"test"的文件夹:test
4. 匹配特定字符串的精确文件夹:
exact
示例:匹配精确为"folder"的文件夹:folder
5. 使用字符集匹配多个字符:
[characters]
示例:匹配以'a'、'b'或'c'开头的文件夹:[abc]
6. 使用通配符匹配任意字符:
示例:匹配任意单个字符的文件夹:
正则表达式在不同Unix系统中可能有细微的差异,请根据具体的系统和工具来使用相应的语法。

Linux正则表达式的学习使用笔记linux操作系统 电脑资料

Linux正则表达式的学习使用笔记linux操作系统 电脑资料

Linux正那么表达式的学习使用笔记linux操作系统电脑资料文章主要是介绍了linux中最根本的一些使用方法,这里也是站长学习linux正那么的一些经历与测试实例了,下面我们一起来看看,几个概念:1.根本正那么表达式扩展的正那么表达式(由普通字符+元字符组成)2.通配(由普通字符+元字符组成)3.元字符注意:正那么表达式中元字符的意义和通配中元字符的意义有区别的bash shell本身不支持正那么表达式,使用正那么表达式的是shell的一些命令和工具,如grep,sed,awk等等但是bash可以使用正那么表达式中的一些元字符实现通配的功能,此时的这些元字符叫通配符。

此时通配中元字符的意义跟正那么表达式中元字符的意义就不一样了。

通配是指:将一个包含通配符的非详细的文件名扩展为计算机,效劳器,网络上的一批详细的文件名的过程。

根本正那么表达式中元字符的意义如下:例子,我们先把下面文件保存成regularexpress.txt文件"Open Source" is a good mechanism to develop programs. apple is my favorite food.Football game is not use feet only.this dress doesn't fit me.However, this dress is about $ 3183 dollars.GNU is free air not free beer.Her hair is very beauty.I can't finish the test.Oh! The soup taste good.motorcycle is cheap than car.This window is clear.the symbol '*' is represented as start.Oh! My god!The gd software is a library for drafting programs.You are the best is mean you are the no. 1.The world is the same with "glad".I like dog.google is the best tools for search keyword.goooooogle yes!go! go! Let's go.# I am VBird使用:q命令退出来,如果不小心对内容作了改动,用:q!强行退出即可然后输入即可显示有the的行(PS:Linux对大小写敏感,曾经把phpMyAdmin 的主页用apache放出来,由于M和A没有大写,倒腾了很久才发现网页打不开是因为这个原因)查询结果如下:加个v就ok了,也许是reverse加个i即可,ignore之意,譬如要查找taste和test两个单词,发现他们都是t■st 格式的,于是可以用命令如果只想查有oo字符的,使用如下命令:不想搜到前面有g的,利用[^]来排除再者,如果不想oo前面有小写字母,可以这样希望开头不是英文字母看得有点晕?第一个^,意思为必须符合;第二个^,意思为非,不是。

正则表达式之POSIX正则表达式语法

正则表达式之POSIX正则表达式语法

正则表达式之POSIX正则表达式语法在更新日志之前,我要说声抱歉,由于之前几天准备面试东奔西跑,然后得闲又复习计算机网络、数据库、操作系统、java、C还有数据结构等一些之前学过的课程知识,加上在PHP文件中解析XML方面又遇到了瓶颈,就一直没有更新博客。

不过我现在想通了,我觉得不可以因为它我搞不懂就一直卡在那儿,我可以越过它继续向前,等到某日,说不定再回首就发现这个问题不是问题了。

所以这节我们将正式开始学习正则表达式。

由于在此之前我从来没有接触过正则表达式,而在PHP中正则表达式又是非常非常重要的,所以我将会花较多的精力来掌握正则表达式,所以我也会分成较多的章节来展开从正则表达式的语法到函数,还有就是它们内容也会比较细,不会像之前的那么粗暴。

正则表达式是对字符串操作的一种逻辑公式,就是实现定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,用来表达对字符串的一种过滤逻辑。

例如Email、电话、密码和生日之类的数据都有特定格式,这个时候就可以使用正则表达式验证数据是否有效。

PHP支持两种类型的正则表达式:POSIX类型和Perl类型。

下面是POSIX类型的正则表达式语法:一、POSIX正则表达式语法POSIX正则表达式的结构和一般的数学表达式类似,有多个操作符(元素)组合在一起构成一个更复杂的表达式。

这种组合不仅可以找到或者匹配表达式(如某个单词或数字),还可以找到许多语义不同但语法相似的字符串(如HTML标记)。

POSIX支持以下三种语法来定义正则表达式,分别是中括号、量词和预定义字符。

1、中括号([])POSIX正则表达式的中括号([])表示在一定的范围内查找字符,可以在中括号内设置要查找的字符序列。

例如,[abc]表示匹配在这3个字符之间的字符串。

可以在中括号内使用短横杠连接两个字符来表示一个连续范围。

下面列出了正则表达式常用的字符范围:常用形式说明[0-9] 匹配任何从0到9之间的十进制数字[a-z] 匹配任何从小写a到z之间的字符[A-Z] 匹配任何从大写A到Z之间的字符[A-Za-z] 匹配任何从大写A到小写z之间的字符2、特殊字符在中括号中指定字符范围时有一个很明显的局限性。

Linux正则表达式--基础正则表示法

Linux正则表达式--基础正则表示法

Linux正则表达式--基础正则表⽰法基础正规表⽰法(出⾃鸟哥的LINUX私房菜) 既然正规表⽰法是处理字符串的⼀个标准表⽰⽅式,他需要⽀持的⼯具程序来辅助,所以,我们这⾥就先介绍⼀个最简单的字符串撷取功能的⼯具程序,那就是 grep 啰!在介绍完 grep 的基本功能之后,就进⼊正规表⽰法的特殊字符的处理能⼒了。

 [root@test root]# grep [-acinv] '搜寻字符串' filename参数说明:-a :将 binary 档案以 text 档案的⽅式搜寻数据-c :计算找到 '搜寻字符串' 的次数-i :忽略⼤⼩写的不同,所以⼤⼩写视为相同-n :顺便输出⾏号-v :反向选择,亦即显⽰出没有 '搜寻字符串' 内容的那⼀⾏!范例:[root@test root]# grep 'root' /var/log/secure将 /var/log/secure 这个档案中有 root 的那⼀⾏秀出来[root@test root]# grep -v 'root' /var/log/secure若该⾏没有 root 才将数据秀出来到屏幕上![root@test root]# last | grep root若该⾏有 root 才将数据秀出来到屏幕上! 好了,我们就开始以 grep 来进⾏正规表⽰法的简易说明吧!我们先以底下这个档案来作为范例:[root@test root]# vi regular_express.txt"Open Source" is a good mechanism to develop programs.apple is my favorite food.Football game is not use feet only.this dress doesn't fit me.However, this dress is about $ 3183 dollars.GNU is free air not free beer.Her hair is very beauty.I can’t finish the test.Oh! The soup taste good.motorcycle is cheap than car.This window is clear.the symbol '*' is represented as start.Oh! My god!The gd software is a library for drafting programs.You are the best is mean you are the no. 1.The world is the same with "glad".I like dog.google is the best tools for search keyword.goooooogle yes!go! go! Let's go. 例题⼀、搜寻特定字符串:搜寻特定字符串很简单吧?假设我们要从刚刚的档案当中取得 the 这个特定字符串,最简单的⽅式就是这样:[root@test root]# grep -n 'the' regular_express.txt8:I can't finish the test.12:the symbol '*' is represented as start.15:You are the best is mean you are the no. 1.16:The world is the same with "glad".18:google is the best tools for search keyword. 那如果想要『反向选择』呢?也就是说,当该⾏没有 'the' 这个字符串时,才显⽰在屏幕上,那就直接使⽤:[root@test root]# grep -vn 'the' regular_express.txt 您会发现,屏幕上出现的⾏列为除了 8,12,15,16,18 五⾏之外的其它⾏列!接下来,如果您想要取得不论⼤⼩写的 the 这个字符串,则:[root@test root]# grep -in 'the' regular_express.txt8:I can't finish the test.9:Oh! The soup taste good.12:the symbol '*' is represented as start.14:The gd software is a library for drafting programs.15:You are the best is mean you are the no. 1.16:The world is the same with "glad".18:google is the best tools for search keyword. 例题⼆、利⽤ [] 来搜寻集合字符如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 存在~这个时候,我可以这样来搜寻。

正则表达式——POSIX字符组

正则表达式——POSIX字符组

正则表达式——POSIX字符组前⾯介绍了常⽤的字符组,但是在某些⽂档中,你可能会发现类似[:digit:]、[:lower:]之类的字符组,看起来不难理解(digit就是"数字",lower就是"⼩写"),但⼜很奇怪,它们就是POSIX字符组(POSIX Character Class)。

因为某些语⾔的⽂档中出现了这些字符组,为避免困惑,这⾥有必要做个简要介绍。

如果只使⽤常⽤的编程语⾔,可以忽略⽂档中的POSIX字符组,也可以忽略本节;如果想了解POSIX字符组,或者需要在Linux/UNIX下的各种⼯具(sed、awk、grep等)中使⽤正则表达式,最好阅读本节。

之前介绍的字符组,都属于Perl衍⽣出来的正则表达式流派(Flavor),这个流派叫做PCRE(Per Compatible Regular Expression)。

在此之外,正则表达式还有其他流派,⽐如POSIX(Portable Operating System Interface for uniX),它是⼀系列规范,定义了UNIX 操作系统应当⽀持的功能,其中也包括关于正则表达式的规范,[:digit:]之类的字符组就是遵循POSIX规范的字符组。

常见的[a-z]形式的字符组,在POSIX规范中仍然获得⽀持,它的准确名称是POSIX⽅括号表达式(POSIX bracket expression),主要⽤在UNIX/Linux系统中。

POSIX⽅括号表达式与之前所说的字符组最主要的差别在于:在POSIX字符组中,反斜线\不是⽤来转义的。

所以POSIX⽅括号表达式[\d]只能匹配\和d两个字符,⽽不是[0-9]对应的数字字符。

为了解决字符组中特殊意义字符的转义问题,POSIX⽅括号表达式规定:如果要在字符组中表达字符](⽽不是作为字符组的结束标记),应当让它紧跟在字符组的开⽅括号之后,所以[]a]能匹配的字符就是]或a;如果要在字符组中标识字符-(⽽不是"-范围表⽰法"),就必须将它放在字符组的闭⽅括号]之前,所以[a-]能匹配的字符就是a或-。

Linux命令行中通配符与正则表达式元字符的对比

Linux命令行中通配符与正则表达式元字符的对比
例如09代表0之间的所有数字因为数字的语系编码是连续n1n2从字符集合的re符里面找出想要选取的字符范围若中括号内的第一个字符为指数符号那表示反向选择例如abc代表一定有一个字符只要是非的其他字符就接受的意思list从字符集合的re符里面找出不想要的字符串或范围word代表一定有一个任意字符的字符有且仅有一个字符word转义字符将特殊字符的特殊意义去除扩展重复一个或一个以上的前一个re字符扩展用或or的方式找出数个字符串扩展找出组的字符串扩展多个重复组的判别
[list]
从字符集合的RE字符里面找出想要选取的字符
[-]
若有减号在中括号内时,代表[编码顺序内的所有字符]。例如[0-9]代表0到9之间的所有数字,因为数字的语系编码是连续的!
[n1-n2]
从字符集合的RE字符里面找出想要选取的字符范围
[^]
若中括号内的第一个字符为指数符号(^),那表示[反向选择],例如[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受的意思
Linux命令行中通配符与正则表达式元字符的对比
通配符元字符
代表意义
正则表达式元字符
代表意义
*பைடு நூலகம்
代表[0个到无穷多个]任意字符
*
重复多个到无穷多个的前一个RE字符
?
代表[一定有一个]任意字符
?(扩展)
重复零个或一个的前一个RE字符
[]
同样代表[一定有一个在括号内]的字符(非任意字符)。例如[abcd]代表[一定有一个字符,可能是a,b,c,d这四个中任何一个]
[^list]
从字符集合的RE字符里面找出不想要的字符串或范围
^word
待查找的字符串(word)在行首
.
代表一定有一个任意字符的字符(“有且仅有一个字符”)

Unix常用头文件

Unix常用头文件

Unix常用头文件linux常用头文件如下:1、POSIX标准定义的头文件目录项文件控制文件名匹配类型路径名模式匹配类型组文件网络数据库操作口令文件正则表达式TAR归档值终端I/O符号常量文件时间字符扩展类型-------------------------INTERNET定义套接字本地接口INTERNET地址族传输控制协议定义------------------------- 内存管理声明Select函数套接字借口文件状态进程时间基本系统数据类型UNIX域套接字定义系统名进程控制2、POSIX定义的XSI扩展头文件cpio归档值动态链接消息显示结构文件树漫游代码集转换使用程序语言信息常量模式匹配函数定义货币类型数据库操作消息类别轮询函数搜索表字符串操作系统出错日志记录用户上下文用户限制用户帐户数据库-----------------------------IPC(命名管道)消息队列资源操作信号量共享存储文件系统信息时间类型附加的日期和时间定义矢量I/O操作3、POSIX定义的可选头文件异步I/O消息队列线程执行调度信号量实时spawn接口XSI STREAMS接口事件跟踪4、C/C++头文件一览C#include//设定插入点#include//字符处理#include//定义错误码#include//浮点数处理#include//对应运算符的宏#include//数据类型最值常量#include//定义本地化C函数#include//定义数学函数#include//异常处理支持#include//信号机制支持#include//不定参数列表支持#include//常用常量#include//定义输入输出函数#include//定义杂项函数及内分配函数#include//字符串处理#include//定义关于时间的函数#include//宽字符处理及输入输出#include//宽字符分类传统C++#include//改用#include//改用#include//改用#include//该类不再支持,改用中的stringstream 标准C++#include//STL通用算法#include//STL位集容器#include//字符处理#include//定义错误码#include//浮点数处理#include//对应各种运算符的宏#include//定义各种数据类型最值的常量#include//定义本地化函数#include//定义数学函数#include//复数类#include//信号机制支持#include//异常处理支持#include//不定参数列表支持#include//常用常量#include//定义输入/输出函数#include//定义杂项函数及内存分配函数#include//字符串处理#include//定义关于时间的函数#include//宽字符处理及输入/输出#include//宽字符分类#include//STL双端队列容器#include//异常处理类#include//文件输入/输出#include//STL定义运算函数(代替运算符)#include//定义各种数据类型最值常量#include//STL线性列表容器#include//本地化特定信息#include//STL映射容器#include//STL通过分配器进行的内存分配#include//动态内存分配#include//STL常用的数字操作#include//参数化输入/输出#include//基本输入/输出支持#include//输入/输出系统使用的前置声明#include//数据流输入/输出#include//基本输入流#include//STL迭代器#include//基本输出流#include//STL队列容器#include//STL集合容器#include//基于字符串的流#include//STL堆栈容器#include//标准异常类#include//底层输入/输出支持#include//字符串类#include//运行期间类型信息#include//STL通用模板类#include//对包含值的数组的操作#include//STL动态数组容器C99增加的部分#include//复数处理#include//浮点环境#include//整数格式转换#include//布尔环境#include//整型环境#include//通用类型数学宏。

cygwin、posix、linuxunix

cygwin、posix、linuxunix

cygwin、posix、linuxunixCygwincygwin 是⼀个兼容层。

Linux 是⼀个内核,Linux 系统上层是软件。

两个本质毫⽆是⽆关关系的。

cygwin 的本质是提供⼀个基本函数接⼝,来让软件可以不经修改或者⼩修改就可以在 Windows 上⾯编译使⽤。

但其实这个实现,就是 (可移植操作系统接⼝ Portable Operating System Interface,缩写为,多了个X)本⾝的设计⽬标。

Windows 不⽀只是 cygwin 这个兼容层基本都是抄 Linux 的软件实现,所以你可以在 cygwin 上⾯⽤兼容 Linux 的软件来使⽤(注意是不是本地运⾏)。

⽽且 cygwin 也直接移植 Linux 上⾯常⽤的软件,所以使⽤感受和操作⽅法也基本类似 LinuxPOSIX表⽰(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应⽤程序提供的接⼝标准,是为要在各种UNIX操作系统上运⾏的软件⽽定义的⼀系列API标准的总称,其正式称呼为IEEE 1003,⽽国际标准名称为ISO/IEC 9945。

POSIX标准意在期望获得级别的。

换句话说,为⼀个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来⾃另⼀个⼚商)上编译执⾏。

POSIX 并不局限于 UNIX。

许多其它的操作系统,例如 DEC OpenVMS ⽀持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)或 POSIX.1,POSIX.1 提供了源代码级别的 C 语⾔应⽤编程接⼝(API)给操作系统的服务程序,例如读写⽂件。

POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为ISO/IEC 9945-1:1990 标准。

UNIXLINUXSHELL正则表达式语法详解附使用方法

UNIXLINUXSHELL正则表达式语法详解附使用方法

UNIXLINUXSHELL正则表达式语法详解附使⽤⽅法⼏乎所有重要问题都需要从⽆⽤数据中过滤出有⽤数据。

了解⼤量的 UNIX? 命令⾏实⽤⼯具如何使⽤正则表达式来去芜取精。

⾮常奇怪,直到今天我仍然能重复周六早上的经典歌曲“Conjunction Junction”。

这是好事(看了太多电视)还是坏事(也许是我现在职业的先兆)仍然有待讨论。

不管怎样,这⾸⼩调在欢快的节奏下传递了基本的信息。

我还没有为学习 UNIX 构想出与“Conjunction Junction”相似的作品,但是我会在未来的⼏个⽉⾥尝试亲⼿编写这样的歌曲。

与此同时,趁着快乐回忆所带来的好⼼情,我们继续以 Schoolhouse 摇滚的传统学习⽅式攻克命令⾏。

现在开始上课。

吐出嘴⾥的⼝⾹糖,回到您的座位上,然后拿出⼀根⼆号铅笔。

还有您,Spicoli。

模仿秀您可以将 UNIX 命令⾏看作是⼀句话:可执⾏命令,如 cat 或 ls,是动词——操作。

命令的输出是名词——要查阅或使⽤的数据。

Shell 操作符,如 |(管道)或 >(重定向标准输出),是连词——⽤于连接句⼦。

例如,命令⾏:ls -A | wc -l ⽤于计算当前⽬录下的条⽬数(忽略特殊条⽬ . 和 ..),它包含两个句⼦。

第⼀个句⼦ ls -A 是动词结构,列举当前⽬录下的内容,第⼆个句⼦ wc -l 是另⼀个动词结构,⽤于计算⾏数。

第⼀个句⼦输出的结果作为第⼆个句⼦的输⼊,并由连接词(管道)连接这两个句⼦。

在本系列⽂章以及其他⽂章中展⽰的许多您可能已经学习过的命令⾏句式都具有这种句⼦结构。

但是,如果缺少了⽂法上的修饰语,命令⾏将显得不专业。

当然,基本句⼦也能完成⼯作,但是这样显得不优美。

(在此对⾼中英语演唱⼆⼈组 Rad ⼥⼠和 Perlstein ⼥⼠表⽰歉意。

)解决更有趣的问题需要⽤到形容词。

⼏乎所有重要问题都需要从⽆⽤数据中过滤出有⽤数据。

虽然属性的数量和种类会有所不同,但是每种⽅案都通过某种⽅式(形式或格式),隐式或显式地描述了它要查找并处理的信息,从⽽⽣成另外⼀种形式的其他信息。

linux的基本操作(正则表达式)

linux的基本操作(正则表达式)

linux的基本操作(正则表达式)正则表达式这部分内容可以说是学习shell脚本之前必学的内容。

如果你这部分内容学的越好,那么你的shell脚本编写能⼒就会越强。

所以不要嫌这部分内容啰嗦,也不要怕⿇烦,要⽤⼼学习。

⼀定要多加练习,练习多了就能熟练掌握了。

在计算机科学中,正则表达式是这样解释的:它是指⼀个⽤来描述或者匹配⼀系列符合某个句法规则的字符串的单个字符串。

在很多或其他⼯具⾥,正则表达式通常被⽤来检索和/或替换那些符合某个模式的⽂本内容。

许多程序设计语⾔都⽀持利⽤正则表达式进⾏字符串操作。

对于系统管理员来讲,正则表达式贯穿在我们的⽇常运维⼯作中,⽆论是查找某个⽂档,抑或查询某个⽇志⽂件分析其内容,都会⽤到正则表达式。

其实正则表达式,只是⼀种思想,⼀种表⽰⽅法。

只要我们使⽤的⼯具⽀持表⽰这种思想那么这个⼯具就可以处理正则表达式的字符串。

常⽤的⼯具有grep, sed, awk 等,下⾯笔者就介绍⼀下这三种⼯具的使⽤⽅法。

【grep / egrep】笔者在前⾯的内容中多次提到并⽤到grep命令,可见它的重要性。

所以好好学习⼀下这个重要的命令吧。

你要知道的是grep连同下⾯讲的sed, awk都是针对⽂本的⾏才操作的。

语法: grep [-cinvABC] ‘word’ filename-c :打印符合要求的⾏数-i :忽略⼤⼩写-n :在输出符合要求的⾏的同时连同⾏号⼀起输出-v :打印不符合要求的⾏-A :后跟⼀个数字(有⽆空格都可以),例如 –A2则表⽰打印符合要求的⾏以及下⾯两⾏-B :后跟⼀个数字,例如 –B2 则表⽰打印符合要求的⾏以及上⾯两⾏-C :后跟⼀个数字,例如 –C2 则表⽰打印符合要求的⾏以及上下各两⾏以下,笔者举⼏个⼩例⼦帮助你好好掌握这个grep⼯具的⽤法。

a. 过滤出带有某个关键词的⾏并输出⾏号b. 过滤不带有某个关键词的⾏,并输出⾏号c. 过滤出所有包含数字的⾏在前⾯也提到过这个”[ ]”的应⽤,如果是数字的话就⽤[0-9]这样的形式,当然有时候也可以⽤这样的形式[15]即只含有1或者5,注意,它不会认为是15。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{m,n} \b * (…|…) (…) \1 \2
\{m,n} \< \> \(…\|…\) \(…\) \1 \2
\{m,n\} \< \> \(…\|…\) \(…\) \1 \2
{m,n} \< \> (…|…) (…) 不支持
\{m,n\} \y \< \> (…|…) (…) \1 \2
POSIX规范
常见的正则表达式记法,其实都源于Perl,实际上,正则表达式从Perl衍生出一个显赫的流派,叫做PCRE(Perl Compatible Regular Expression),『\d』、 『\w』、『\s』之类的记法,就是这个流派的特征。但是在PCRE之外,正则表达式还有其它流派,比如下面要介绍的POSIX规范的正则表达式。 POSIX的全称是Portable Operating System Interface for uniX,它由一系列规范构成,定义了UNIX操作系统应当支持的功能,所以“POSIX规范的正则表达式”其实只 是“关于正则表达式的POSIX规范”,它定义了BRE(Basic Regular Expression,基本型正则表达式)和ERE(Extended Regular Express,扩展型正则表达式)两大 流派。在兼容POSIX的UNIX系统上,grep和egrep之类的工具都遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。
Linux/Unix工具与正则表达式的POSIX规范
作者 余晟 发布于 2011年7月11日 领域 架构 & 设计 , 语言 & 开发 主题 Ruby , .NET , Java , 技术 标签 专栏 , 正则表达式
对正则表达式有基本了解的读者,一定不会陌生『\d』、『[a-z]+』之类的表达式,前者匹配一个数字字符,后者匹配一个以上的小写英文字母。但是如果你用过vi、 grep、awk、sed之类Linux/Unix下的工具或许会发现,这些工具虽然支持正则表达式,语法却很不一样,照通常习惯的办法写的『\d』、『[a-z]+』之类的正则表达 式,往往不是无法识别就是匹配错误。而且,这些工具自身之间也存在差异,同样的结构,有时需要转义有时不需要转义。这,究竟是为什么呢? 原因在于,Unix/Linux下的工具大多采用POSIX规范,同时,POSIX规范又可分为两种流派(flavor)。所以,首先有必要了解一下POSIX规范。
[:punct:]
[][!"#$%&'()*+,./:; <=>?@\^_`{|}~-] [ \t\r\n\v\f] [A-Z] [A-Za-z0-9_]
[\p{P}\p{S}]
[:space:] [:upper:] [:word:]*
空白字符 大写字母字符 字母字符
[\p{Z}\t\r\n\v\f] \p{Lu} [\p{L}\p{N}\p{Pc}]
注:PCRE中常用\b来表示“单词的起始或结束位置”,但Linux/Unix的工具中,通常用\<来匹配“单词的起始位置”,用\>来匹配“单词的结束位置”,sed中的\y可以同时匹 配这两个位置。
POSIX字符组
在某些文档中,你还会发现类似『[:digit:]』、『[:lower:]』之类的表示法,它们看起来不难理解(digit就是“数字”,lower就是“小写”),但又很奇怪,这就是POSIX 字符组。不仅在Linux/Unix的常见工具中,甚至一些变成语言中都出现了这些字符组,为避免困惑,这里有必要简要介绍它们。 在POSIX规范中,『[a-z]』、『[aeiou]』之类的记法仍然是合法的,其意义与PCRE中的字符组也没有区别,只是这类记法的准确名称是POSIX方括号表达式 (bracket expression),它主要用在Unix/Linux系统中。POSIX方括号表示法与PCRE字符组的最主要差别在于:POSIX字符组中,反斜线\不是用来转义的。所以 POSIX方括号表示法『[\d]』只能匹配\和d两个字符,而不是『[0-9]』对应的数字字符。 为了解决字符组中特殊意义字符的转义问题,POSIX方括号表示法规定,如果要在字符组中表达字符](而不是作为字符组的结束标记),应当让它紧跟在字符组的 开方括号之后,所以POSIX中,正则表达式『[]a]』能匹配的字符就是]和a;如果要在POSIX方括号表示法中表达字符-(而不是范围表示法),必须将它紧挨在闭方 括号]之前,所以『[a-]』能匹配的字符就是a和-。 POSIX规范也定义了POSIX字符组,它近似等价于于PCRE的字符组简记法,用一个有直观意义的名字来表示某一组字符,比如digit表示“数字字符”,alpha表示“字母 字符”。 不过,POSIX中还有一个值得注意的概念:locale(通常翻译为“语言环境”)。它是一组与语言和文化相关的设定,包括日期格式、货币币值、字符编码等等。 POSIX字符组的意义会根据locale的变化而变化,下面的表格介绍了常见的POSIX字符组在ASCII语言环境与Unicode语言环境下的意义,供大家参考。 POSIX字符组 POSIX字符组 [:alnum:]* [:alpha:] [:ascii:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] 说明 字母字符和数字字符 字母 ASCII字符 空格字符和制表符 控制字符 数字字符 空白字符之外的字符 小写字母字符 类似[:graph:],但包括空白 字符 标点符号 ASCII语言环境 [a-zA-Z0-9] [a-zA-Z] [\x00-\x7F] [ \t] [\x00-\x1F\x7F] [0-9] [\x21-\x7E] [a-z] [\x20-\x7E] Unicode语言环境 [\p{L&}\p{Nd}] \p{L&} \p{InBasicLatin} [\p{Zs}\t] \p{Cc} \p{Nd} [^\p{Z}\p{C}] \p{Ll} \P{C}
ERE
在Linux/Unix常用工具中,egrep、awk则属于ERE这一派,。虽然BRE名为“基本”而ERE名为“扩展”,但ERE并不要求兼容BRE的语法,而是自成一体。因此其中的元 字符不用转义(在元字符之前添加反斜线会取消其特殊含义),所以『(ab|cd)』就可以匹配字符串ab或者cd,量词『+』、『?』、『{n,m}』可以直接使用。ERE并 没有明确规定支持反向引用,但是不少工具都支持『\1』、『\2』之类的反向引用。 GNU出品的egrep等工具就属于ERE流(更准确的名字是GNU ERE),但因为GNU已经对BRE做了不少扩展,所谓的GNU ERE其实只是个说法而已,它有的功能 GNU BRE都有了,只是元字符不需要转义而已。 下面的表格简要说明了几种POSIX流派的区别[1](其实,现在的BRE和ERE在功能上并没有什么区别,主要的差异是在元字符的转义上)。 几种POSIX流派的说明 流派 BRE 说明 工具
I n 正则表达式的P O S I X 规范
h t t p : / / w w w . i n f o q . c o m / c n / n e w s / 2 0 1 1 / 0 7 / r e g u l a r - e x p r e s s i o n s - . . .
第2 页 共3 页
2 0 1 1 / 1 1 / 1 51 5 : 1 5
I n f o Q :L i n u x / U n i x 工具与正则表达式的P O S I X 规范
h t t p : / / w w w . i n f o q . c o m / c n / n e w s / 2 0 1 1 / 0 7 / r e g u l a r - e x p r e s s i o n s - . . .
(、)、{、}都必须转义使用,不支持+、?、| grep、sed、vi(但vi支持这些多 选结构和反向引用) (、)、{、}、+、?、| 都必须转义使用 GNU grep、GNU sed
GNU BRE ERE
元字符不必转义,+、?、(、)、{、}、| 可以 egrep、awk 直接使用,\1、\2的支持不确定 元字符不必转义,+、?、(、)、{、}、| 可以 grep –E、GNU awk 直接使用,支持\1、\2
I n f o Q :L i n u x / U n i x 工具与正则表达式的P O S I X 规范
h t t p : / / w w w . i n f o q . c o m / c n / n e w s / 2 0 1 1 / 0 7 / r e g u l a r - e x p r e s s i o n s - . . .
[:xdigit:]
十六进制字符
[A-Fa-f0-9]
[A-Fa-f0-9]
注 1:标记 *的字符组简记法并不是 POSIX规范中的,但使用很多,一般语言中都提供,文档中也会出现。 注 2:对应的 Unicode属性请参考本系列文章已经刊发过的关于 Unicode的部分。 POSIX字符组的使用有所不同。主要区别在于,PCRE字符组简记法可以脱离方括号直接出现,而POSIX字符组必须出现在方括号内,所以同样是匹配数字字符,单 独出现时,PCRE中可以直接写『\d』,而POSIX字符组就必须写成『[[:digit:]]』。 Linux/Unix下的工具中,一般都可以直接使用POSIX字符组,而PCRE的字符组简记法『\w』、『\d』等则大多不支持,所以如果你看到『[[:space:]]』而不是『\s』, 一定不要感到奇怪。 不过,在常用的编程语言中,Java、PHP、Ruby也支持使用POSIX字符组。其中Java和PHP中的POSIX字符组都是按照ASCII语言环境进行匹配;Ruby的情况则要复 杂一点,Ruby 1.8按照ASCII语言环境进行匹配,而且不支持『[:word:]』和『[:alnum:]』,Ruby 1.9按照Unicode语言环境进行匹配,同时支持『[:word:]』和 『[:alnum:]』。 说明:关于正则表达式的系列文章到此即告一段落,作者最近已经完成了一本关于正则表达式的书籍,其中更详细也更全面地讲解了正则表达式使用中的各种问题。 该书暂定名《正则导引》,预计近期上市,有兴趣的读者敬请关注。 [1] 关于ERE和BRE的详细规范,可以参考 /onlinepubs/009695399/basedefs/xbd_chap09.html。 关于作者 余晟,程序员,曾任抓虾网高级顾问,现就职于盛大创新院,感兴趣的方向包括搜索和分布式算法等。翻译爱好者,译有《精通正则表达式》(第三版)和《技术领 导之路》,目前正在写作《正则表达式傻瓜书》(暂定名),希望为国内开发同行贡献一本实用的正则表达式教程。 感谢张凯峰对本文的策划和审校。 给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
相关文档
最新文档