正则表达式
文章平均质量分 58
awk技术
这个作者很懒,什么都没留下…
展开
-
Linux正则表达式-编写正则表达式
为了所有实用化的用途,你可以通过使用程序产生正确的结果。然而,并不意味着程序总是如你所愿的那样正确地工作。多数情况下,如果程序不能产生想要的输出,可以断定真正的问题(排除输入或语法错误)在于如何描述想要的东西。换句话说,应该考虑纠正问题的地方是描述想要的结果的表达式。表达式不完整或者公式表示得不正确。例如,如果程序计算下面的表达式:PAY = WEEKLY_SALARY * 52原创 2015-05-27 19:41:02 · 615 阅读 · 0 评论 -
Linux正则表达式-通配符
通配符元字符或者句点(.)被认为是与变量等价的。变量表示算术表达式中的任意值。在正则表达式中,句点(.)是代表除换行符以外的任意字符的通配符(在awk中,句点甚至可以匹配嵌入式换行符)。假定我们正在描述一个字符序列,使用通配符元字符可以指定任何字符都可以填充的一个位置。例如,如果要索索包含Intel系统微处理器的讨论文件,使用下面的正则表达式:80.86将匹配包含序列"8028原创 2015-05-24 22:19:24 · 632 阅读 · 0 评论 -
Linux正则表达式-选择性操作与分组操作
选择性操作竖线(|)字符是元字符扩展集的一部分,用于指定正则表达式的联合。如果某行匹配其中的一个正则表达式,那么它就匹配该模式。例如,正则表达式:UNIX|LINUX将匹配包含字符串"UNIX" 或字符串"LINUX" 的行。可以指定更多的选择,例如:UNIX|LINUX|NETBSD使用egrep时,打印匹配这3种模式中任意一种的行。在sed中,没有联合元字符,可以分别指原创 2015-06-07 21:25:22 · 1922 阅读 · 0 评论 -
Linux正则表达式-字符的跨度
元字符允许你指定重复出现的字符。考虑下面的表达式:11*0它将匹配下面的每一行:101101111101111111111111111111111111110这些元字符使正则表达式具有了伸缩性。现在我们来看一对用于指定跨度并决定跨度长度的元字符。可以指定一个字母或正则表达式出现的最小或最大次数。在grep和sed中使用\{和\}。 awk不支持。在任何情原创 2015-06-06 20:41:54 · 631 阅读 · 0 评论 -
Linux正则表达式-定位元字符
有两个元字符用于指定字符串出现在行首或行末。脱字符(^)是指示开始的单字符正则表达式。美元符号($)是指示行结尾的单字符的正则表达式。这些通常称为"定位符",因为它们将匹配限定在特定位置。例如,可以使用以下表达式打印以First开始的行:^First没有^元字符,这个表达式将打印包含First的任意行。通常,使用VI输入要由troff处理的文本,并且不想让空格出现在行的结尾。如果想原创 2015-06-05 20:21:35 · 824 阅读 · 0 评论 -
Linux正则表达式-反斜杠
元字符反斜杠(\)将元字符转换成普通字符(和将普通字符转换成元字符)。它强制将任意元字符解释为普通文字,以便匹配该字符本身。例如,句点(.)是元字符,如果想匹配句点,那么就需要用反斜杠对其进行转义。下面的正则表达式匹配由3个空格跟随的句点。\.□□□反斜杠常用于匹配以句点开始的troff请求或宏。\.nf还可以用反斜杠转义反斜杠。例如,troff中的原创 2015-05-23 21:07:09 · 1689 阅读 · 0 评论 -
Linux正则表达式-重复出现的字符
星号(*)元字符表示它前面的正则表达式可以出现零次或多次。也就是说,如果它修改了单个字符,那么该字符可以在那里也可以不在那里,并且如果它在那里,那可能会不止出现一个。可以使用星号元字符匹配出现在引号中的单词。□"*hypertext"*□不管单词"hypertext"是否出现在引号中都会被匹配。而且,如果由星号修饰的字符确实存在,那么有可能出现多次。例如,我们来看一系列数字:原创 2015-06-04 21:43:28 · 1184 阅读 · 0 评论 -
Linux正则表达式-定位元字符
有两个元字符用于指定字符串出现在行首或行末。脱字符(^)是指示开始的单字符正则表达式。美元符号($)是指示行结尾的单字符的正则表达式。这些通常称为"定位符",因为它们将匹配限定在特定位置。例如,可以使用以下表达式打印以First开始的行:^First没有^元字符,这个表达式将打印包含First的任意行。通常,使用VI输入要由troff处理的文本,并且不想让空格出现在行的结尾。如果想原创 2015-06-03 21:19:31 · 657 阅读 · 0 评论 -
Linux正则表达式-重复出现的字符
星号(*)元字符表示它前面的正则表达式可以出现零次或多次。也就是说,如果它修改了单个字符,那么该字符可以在那里也可以不在那里,并且如果它在那里,那可能会不止出现一个。可以使用星号元字符匹配出现在引号中的单词。□"*hypertext"*□不管单词"hypertext"是否出现在引号中都会被匹配。而且,如果由星号修饰的字符确实存在,那么有可能出现多次。例如,我们来看一系列数字:原创 2015-06-02 22:26:24 · 2024 阅读 · 0 评论 -
Linux正则表达式-元字符
我们已经看过了表达式中的两个基本元素:1.以一个字面值或变量表示的值。2. 一个操作符。正则表达式是由这些相同的元素组成的。除元字符除外,都被解释为只匹配它本身的字面值。元字符汇总特殊字符用途.匹配除换行符以外的任意单个字符。在awk 中,句点也能匹配换行符。*匹配任意一个(包括零个)在它面前的原创 2015-05-22 22:18:43 · 1162 阅读 · 0 评论 -
Linux正则表达式-单词
也许你已经发现,有时匹配完整的单词很难。例如,如果想匹配模式"book",搜索会命中包含单词"book"和"books"的行,而且还有单词"bookish"、"handbook"和"booky"。很显然可以在"book"前后使用空格来限制匹配情况。□book□然而,这个表达式只匹配单词"book",它会丢掉它的复数形式"books" 。为了匹配单数或复数单词,可能要使用星号元字符:原创 2015-06-01 20:25:04 · 1393 阅读 · 0 评论 -
Linux正则表达式-POSIX字符类
POSIX标准对正则表达式字符和操作符的含义进行了形式化。这种标准定义了两类正则表达式:基本的正则表达式(BRE) , grep和sed使用这种正则表达式;扩展的正则表达式,egrep和awk使用这种正则表达式。为了适应非英文的环境, POSIX标准增强了匹配不在英文字母表中的字符的字符类的功能。例如,法文è是一个字母字符,但是使用典型的字符类[a-z]不匹配它。该标准提供了附加的字母序列原创 2015-05-31 19:17:40 · 1290 阅读 · 0 评论 -
Linux正则表达式-排除字符类
通常,字符类包括在哪个位置想要匹配的所有的字符。在类中作为第一个字符的脱字符(^)将类中的所有字符排除在被匹配之外。相反,除换行符以外的没有列在方括号中的任意字符都将匹配。下面的模式将匹配任意非数字字符:[^0-9]它匹配字母表中所有的大写和小写字母以及所有特殊字符,例如标点符号。排除特殊字符有时比显示地列出想要匹配的所有字符更方便。例如,如果想要匹配任意辅音,可以简单地排除元音:原创 2015-05-30 21:10:55 · 2614 阅读 · 0 评论 -
正则表达式-字符的范围
连字符(-)用于指定一个字符范围。例如,所有大写英文字符的范围可以指定为:[A-Z]一个数字的范围可以指定为:[0-9]该字符类有助于解决匹配文章引用的问题。请看下面的正则表达式:[cC]hapter [1-9]它匹配字符串"chapter" 或"Chapter" 且其后面跟有空格,然后是从1到9的任意单个数字,下面的每一行都匹配这种模式:you will原创 2015-05-29 20:58:16 · 2923 阅读 · 1 评论 -
Linux正则表达式-表达式
你可能熟悉一个计算器解释的表达式。请看下面的算术表达式:2+4"2加4" 出几个常数或字面值和一个操作符组成。计算器程序必须能够识别,例如, "2" 是数字常数而加号表示一个操作符,而不能解释为"+"字符。表达式告诉计算机如何产生结果。尽管我们真正想要的就是"2+4"的结果,但我们不能简单地告诉计算机返回6。我们指示计算机计算表达式并返回值。表达式可以比"2+4"更复杂,事实上,它原创 2015-05-21 21:25:27 · 464 阅读 · 0 评论 -
正则表达式-字符类
字符类是对通配符概念的改进。我们可以列出要匹配的字符,而不是匹配特殊位置的任意字符。使用方括号元字符( [] )将字符列表括起来,其中每个字符占据一个位置。字符类在处理大写和小写字母时非常有用。例如,如果"what" 可能以首字母大写或小写的形式出现,则可以指定:[Ww]hat这个正则表达式可以匹配"what" 或"What" 。它匹配包含这4个字符的字符串的任意行原创 2015-05-28 22:21:17 · 629 阅读 · 0 评论 -
awk字段和引用的分离
awk使用字段操作符$来指定字段。在该操作符后面跟着一个数字或变量,用于标识字段的位置。"$1" 表示第一个字段, "$2" 表示第二个字段等等。"$0 "表示整个输入记录。下面的例子显示了第一个字段是姓,第二个字段是名字,后面是电话号码。$ awk '{ print $2,$1,$3 }' namesRobinson John 666-555-1111$1表示名字,原创 2015-06-10 20:03:10 · 805 阅读 · 0 评论