`

一天一个shell_2_grep用法

阅读更多

1.基础

^

锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$

锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

.

匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

*

匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[]

匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^]

匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\)

标记匹配字符,如'\(love\)',love被标记为1。

\<

锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。

\>

锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\}

重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。

x\{m,\}

重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。

x\{m,n\}

重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。

\w

匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W

\w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b

单词锁定符,如: '\bgrep\b'只匹配grep。

 ---------------------------------------------

 

 

2. 零宽断言

(?=exp)

 

也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp

比如

\b\w+(?=ing\b)

 

,匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

-------------------------

 

(?<=exp)

 

 

也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如

(?<=\bre)\w+\b

 

会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

 

--------------------------

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。
零宽度负预测先行断言
(?!exp)
断言此位置的后面不能匹配表达式exp。例如:
\d{3}(?!\d)
匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。
同理,我们可以用
(?<!exp)
 
零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。
应用
cat "$1" | grep -Po "(?<=^${name}=).*$" 
 零宽断言里面长度要一定
cat "$1" | grep -Po "(?<=^${name}.*=).*$" //出错
 
grep来判断字符串是否包含
 echo "$temp" | grep -q ":"
    if [ $? -ne 0 ]; then
        echo "$temp : can not detect port, add default '80' "
        temp="${temp}:80"
    fi
 
interface=("url.interface.keyword" "url.interface.meta.incremental" "url.interface.meta.total" "url.interface.meta.urgent" "url.interface.vt.time" "url.interface.colander.admin.hostingsite" "url.colanderKeywordSync")
for name in "${interface[@]}";do
 
 
 
 
分享到:
评论

相关推荐

    shell脚本学习第一天

    首先,创建一个Shell脚本,我们通常会使用`vim`这样的文本编辑器,比如创建一个名为`shell_name.sh`的脚本。在文件中,我们需要在第一行添加`#!/bin/bash`,这是一个称为“shebang”的行,用于告诉系统该脚本应由...

    grep-find命令详解

    - `grep "$a" file`:如果`a`是一个变量,那么它的内容将被插入到`grep`命令中,`grep`将搜索这个内容。 Grep还支持多种选项: - `-b`:显示匹配行的字节偏移量。 - `-c`:仅显示匹配行的数量。 - `-v`:显示不...

    一天一个shell命令 linux文本内容操作系列-grep命令详解

    要在一个文件夹中的多个文件中进行匹配,只需列出所有文件名即可,如`grep PATTERN file1.txt file2.txt`。 3. **从标准输入中读取** 通过管道`|`,我们可以将其他命令的输出传递给`grep`,例如`echo "text" | ...

    shell教程(一个很不错的bash脚本编写教程)

    标题“shell教程(一个很不错的bash脚本编写教程)”明确指出这是一篇关于Shell编程的教学文章,特别是针对Bash(Bourne Again Shell)脚本的编写。Bash是Unix、Linux等操作系统中最常用的一种Shell类型。 #### ...

    shell编程文档30天

    在30天的学习计划中,每天可能涵盖一个或多个主题,逐步深入,从基础到进阶,最终让你能够编写出功能强大且高效的Shell脚本。通过这份资料,你不仅可以学习到Shell编程,还能更好地理解和利用Linux/Unix系统。

    linux unix shell总结(1)

    - **Bourne Shell (sh)**:Unix历史上第一个广泛使用的Shell。 - **Bash (Bourne Again SHell)**:基于Bourne Shell发展而来,功能更加强大,是目前最流行的Shell之一。 - **Korn Shell (ksh)**:结合了Bourne Shell...

    linux shell 命令, 脚本编程

    **8.3 小结**:本章详细介绍了grep命令的使用方法及其与正则表达式的结合应用,帮助用户高效地进行文本搜索和过滤。 以上是对《Linux Shell 命令与脚本编程》知识点的详细梳理,覆盖了文件安全与权限管理、文件搜索...

    Linux Shell Programming

    - **正则表达式**:掌握正则表达式的使用方法,以便更灵活地进行文本匹配和替换操作。 - **函数定义**:了解如何定义和调用自定义函数,提高代码复用性和可读性。 - **重定向与管道**:熟悉标准输入输出流的重定向和...

    《LinuxShell训练营》PPT.pdf

    2. **Shell脚本调试与排错**:学习如何找出并修复脚本中的错误,包括使用调试工具和日志记录等方法。 3. **Shell脚本的公共函数库**:了解如何利用现有的公共函数库来加速开发,以及如何创建自己的函数库。 通过这...

    16日-23日的shell 笔记.rar

    通过这七天的学习,你可以对Shell有一个全面而深入的理解,从基础概念到实际应用,再到高级技巧,都能在实践中逐步掌握。在学习过程中,不断地练习和实践是提升技能的关键,希望这些笔记能成为你探索Shell世界的一盏...

    Linux基本命令(2)和Shell编程

    熟悉元字符、重定向符、管道操作符“|”的使用方法。 ##### 2. 实验任务与要求 在字符界面下完成以下操作: - **查找当前目录下以小写字母‘a’打头,后接一个数字,且扩展名为.txt的所有文件** - **使用 find ...

    linux 下web服务器每天生成日志的shell脚本

    为了有效地管理和利用这些日志,我们可以编写一个shell脚本来自动化地处理日志的生成与归档。下面将详细介绍如何编写这样一个脚本,以及涉及的相关知识点。 一、shell脚本基础 Shell脚本是Linux环境下的批处理程序...

    一天一个shell命令 linux文本操作系列-wc命令详解

    `wc` 命令是Linux系统中一个非常实用的工具,主要用于统计文本文件的行数、单词数和字符数。它的名字源自英文 "Word Count" 的缩写,功能强大且简单易用,适合在各种文本处理场景中进行快速统计。 ### wc 命令的...

    Linux高级bash编程

    高级bash编程 高级Bash脚本编程指南(一) 目录 ++++ 第一部分.... 1. 为什么使用shell编程 ... 在一个脚本中使用 cmp 来比较2个文件. 12-33. basename 和 dirname 12-34. 检查文件完整性 12-35. Uudecod 编码后的...

    linux Shell学习笔记第一天

    Linux Shell是Linux操作系统中的一种命令解释器,它允许用户通过命令行界面与系统进行交互,执行各种任务。在学习Shell的过程中,了解其基本概念、常用命令及其应用是至关重要的。 首先,Shell脚本是由一系列系统...

    Advanced Bash-Scripting Guide <>

    在一个脚本中使用 cmp 来比较2 个文件. 12-33. basename 和 dirname 12-34. 检查文件完整性 12-35. Uudecod 编码后的文件 12-36. 查找滥用的连接来报告垃圾邮件发送者 12-37. 分析一个垃圾邮件域 12-38. 获得一份...

Global site tag (gtag.js) - Google Analytics