InfoQ_ Linux_Unix工具与正则表达式的POSIX规范
- 格式:pdf
- 大小:45.12 KB
- 文档页数:3
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标准于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标准使得不同的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下的正则表达式(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中,无异于背着肥马爬行,既觉得处处不方便,做甚麽事都碍手碍脚,又浪费时间体力。
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 正则表达式的基本语法:
1. 字符匹配:
- .:匹配任意一个字符。
- []:匹配括号内的任意一个字符。
- [^]:匹配除了括号内的字符以外的任意一个字符。
2. 重复匹配:
- *:匹配前面的字符重复零次或多次。
- +:匹配前面的字符重复一次或多次。
- ?:匹配前面的字符零次或一次。
- {n}:匹配前面的字符恰好n 次。
- {n,m}:匹配前面的字符n 至m 次。
- {n,}:匹配前面的字符至少n 次。
3. 边界:
- ^:匹配行首。
- :匹配行尾。
4. 特殊字符:
- \d:匹配任意一个数字字符。
- \s:匹配任意一个空白字符。
- \w:匹配任意一个字母数字字符。
以上是POSIX 正则表达式的基本语法,常用于grep 等命令中的文本搜索和查询。
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标准对中国 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系统中,可以使用正则表达式来匹配文件夹名称。
以下是一些常用的正则表达式用法:
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正那么的一些经历与测试实例了,下面我们一起来看看,几个概念: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前面有小写字母,可以这样希望开头不是英文字母看得有点晕?第一个^,意思为必须符合;第二个^,意思为非,不是。