
当我们在Unix / Linux下使用特定命令从字符串或文件中读取或编辑文本时,我们通常需要过滤输出以获得感兴趣的部分. 这是正则表达式派上用场的地方.
正则表达式可以定义为代表几个字符序列的字符串. 它最重要的功能之一是允许您过滤命令或文件的输出,编辑文本或配置文件的一部分,等等.
正则表达式由以下内容组成:
您必须使用awk之类的文本过滤工具来过滤文本. 您也可以将awk本身视为一种编程语言. 但是由于本指南的范围是有关使用awk的,所以我将遵循一个简单的命令行过滤工具对其进行介绍.
awk的一般语法如下:
# awk 'script' filename
“脚本”是awk理解并应用于文件名的一组命令.
它的工作方式是读取文件中的给定行,复制行的内容并在该行上执行脚本. 该过程将在文件的所有行上重复.
脚本'script'中内容的格式为'/ pattern / action',其中pattern是正则表达式,而action是awk在行中找到此模式时应执行的操作.
在下面的示例中,我们将重点讨论前面讨论的元字符.
下面的示例将打印/ etc / hosts文件中的所有行,因为未指定任何模式.
# awk '//{print}' /etc/hosts


awk打印文件中的所有行
在下面的示例中,指定了模式localhostawk if 正则表达式,因此awk将在文件/ etc / hosts中将这些行与localhost匹配.
# awk '/localhost/{print}' /etc/hosts

awk在文件中打印与模式匹配的行
在下面的示例中,符号(. )将匹配包含loc,localhost,localnet的字符串.
这里的正则表达式表示要匹配l个字符c.
# awk '/l.c/{print}' /etc/hosts

使用awk打印与文件中的模式匹配的字符串
(LCTT译者注: 此处的原始作者有一个误解,谢谢微信读者的“ this is only”提示,*这里表示前一个字符重复零次或多次,因此实际上等同于*并且前面的字符是没有用的. )
在以下示例中,它将匹配包含本地主机,本地网络,行和功能的字符串. 将匹配带有c字符的字符串.
# awk '/l*c/{print}' /etc/localhost


使用awk匹配文件中的字符串
您可能还意识到(*)会尝试匹配它可能检测到的最长匹配项.
让我们看一个证明这一点的例子. 正则表达式t * t表示在以下行中匹配以t开头并以t结尾的字符串: 将匹配带有t字符的字符串:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
使用模式/ t * t /时,将获得以下可能的结果: 以下字符串仅包含t字符:
this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
/ t * t /中的通配符(*)将导致awk选择最后一个匹配项: 以下字符串仅包含t字符:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
以集合[al1]为例,awk将匹配文件/ etc / hosts中包含字符a或l或1的所有字符串.
# awk '/[al1]/{print}' /etc/hosts

使用awk在文件中打印匹配的字符

下一个示例匹配以K或k开头的字符串(不指行首的字母),后跟T:
# awk '/[Kk]T/{print}' /etc/hosts

使用awk在文件中打印匹配的字符
awk理解的字符:
让我们看下面的示例:
# awk '/[0-9]/{print}' /etc/hosts

使用awk在文件中打印匹配的数字
在上面的示例中,文件/ etc / hosts中的所有行至少包含一个数字[0-9].
在以下示例中,它匹配以给定模式开头的所有行:
# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts


使用awk打印与图案匹配的行
它将匹配以给定模式结尾的所有行:
# awk '/ab$/{print}' /etc/hosts
# awk '/ost$/{print}' /etc/hosts
# awk '/rs$/{print}' /etc/hosts

使用awk打印与模式匹配的字符串
它允许您将转义字符后的字符用作文本,这被理解为其字面意思.
在下面的示例中,第一个命令打印出文件中的所有行,第二个命令中我想将$ 25.00的行与之匹配,但是由于我没有使用转义符awk if 正则表达式,所以什么也没打印.
第三个命令是正确的,因为这里使用一个转义字符来转义$以将其识别为“ $”(不是元字符).
# awk '//{print}' deals.txt
# awk '/$25.00/{print}' deals.txt
# awk '/\$25.00/{print}' deals.txt

结合使用awk和转义字符
以上并非全部用作过滤工具的awk命令. 上面的示例是awk的基本操作. 在接下来的章节中,我将进一步介绍如何使用awk的高级功能. 感谢您的阅读,请在评论部分中发表您的评论.
通过:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-234750-1.html
结果生了好多小蛆
学生党的悲催木钱买票
差距主要在单舰吨位