linux通配符和正则表达式

article/2025/9/23 22:51:05

1、 通配符

通配符是shell在做PathnameExpansion时用到的。说白了一般只用于文件名匹配,它是由shell解析的,比如findlscpmv等。

 

1、1 Shell常见通配符:

通配符

含义

实例

*

匹配 0 或多个字符

a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。

?

匹配任意一个字符

a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。

[list]

匹配 list 中的任意单一字符

a[xyz]b  a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。

[!list]或[^list]

匹配 除list 中的任意单一字符

a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。

[c1-c2]

匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]

a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b... a9b。

[!c1-c2]或[^c1-c2]

匹配不在c1-c2的任意字符

a[!0-9]b 如acb adb

{string1,string2,...}

匹配 sring1 或 string2 (或更多)其一字符串

a{abc,xyz,123}b 列出aabcb,axyzb,a123b

 

1、2 shell Meta字符(元字符)

shell 除了有通配符之外,还有一系列自己的其他特殊字符。

字符

说明

IFS

由 <space> 或 <tab> 或 <enter> 三者之一组成(我们常用 space )

CR

由 <enter> 产生

=

设定变量

$

取变量值或取运算值

重定向 stdout

重定向 stdin

|

管道符号

&

重导向 file descriptor ,或将命令置于背景执行

( )

将其内的命令置于 nested subshell 执行,或用于运算或命令替换

{ }

将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围

;

在前一个命令结束时,而忽略其返回值,继续执行下一个命令

&&

在前一个命令结束时,若返回值为 true,继续执行下一个命令

||

在前一个命令结束时,若返回值为 false,继续执行下一个命令

!

运算意义上的非(not)的意思

#

注释,常用在脚本中

\

转移字符,去除其后紧跟的元字符或通配符的特殊意义

 

1、3 转义字符

有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。 shell提供转义符有三种。

字符

说明

‘’(单引号)

硬转义,其内部所有的shell 元字符、通配符都会被关掉。

“”(双引号)

软转义,其内部只允许出现特定的shell 元字符:$用于参数替换 `(反单引号,esc键下面)用于命令替换

\(反斜杠)

又叫转义,去除其后紧跟的元字符或通配符的特殊意义

举例:



2、正则表达式

正则表达式是用来匹配字符串的,针对文件内容的文本过滤工具里,大都用到正则表达式,如vigrepawksed等。

另外,这篇文章只针对Linux下的文本过滤工具的正则表达式进行讨论,其他的一些编程语言,如C++c regex,c++ regex,boost regex),javapython等都有自己的正则表达式库。

简单点来说,正则表达式是对一组正在处理的文本的描述。

例1:查找文件test中出现单词hi,并且若干字符后出现单词Jerry的行

$ grep -E"\<hi\>.+\<Jerry\>" test

ni hao hi nihao Jerrydsfds

 

例2:查找文件test中出现以hi开头的单词,并且若干字符后出现以Jerry结尾的单词的行

grep -E "\<hi.+Jerry\>"test

ni hao hi nihao Jerrydsfds

wo buhao hiwuyanpingjfkjk Jerry

wo henhao hiwuyanJerry

 

在正则表达式的使用过程中,一些字符是以特定方式处理的。最常使用的特殊字符如下:

字符

含义

^

指向一行的开头

$

指向一行的结尾

.

任意单个字符

[]

字符范围。如[a-z]

如果想将上述字符用作普通字符,就需要在它们前面加上\字符。例如,如果想使用$字符,你需要将它写为\$

在方括号中还可以使用一些有用的特殊匹配模式,如下:

匹配模式

含义

[:alnum:]

字母与数字字符,如grep[[:alnum:]] words.txt

[:alpha:]

字母

[:ascii:]

ASCII字符

[:blank:]

空格或制表符

[:cntrl:]

ASCII控制字符

[:digit:]

数字

[:graph:]

非控制、非空格字符

[:lower:]

小写字母

[:print:]

可打印字符

[:punct:]

标点符号字符

[:space:]

空白字符,包括垂直制表符

[:upper:]

大写字母

[:xdigit:]

十六进制数字

另外,如果指定了用于扩展的-E选项,那些用于控制匹配完成的其他字符可能会遵循正则表达式的规则,对于grep命令,我们还需要在这些字符前面加上\,下表是扩展部分一览:

选项

含义

?

最多一次

*

必须匹配0次或多次

+

必须匹配1次或多次

{n}

必须匹配n次

{n,}

必须匹配n次或以上

{n,m}

匹配次数在n到m之间,包括边界

 

3、通配符和正则表达式比较

(1)通配符和正则表达式看起来有点像,不能混淆。可以简单的理解为通配符只有*,?,[],{}这4种,而正则表达式复杂多了。

2*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的。比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符。

 

4、grep

引自:http://hi.baidu.com/hzslqt/blog/item/dbd0ea4e5145f819b3de05d6.html

1. grep简介

    grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

    grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

    grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

2. grep正则表达式元字符集(基本集)

^       :锚定行的开始 如:'^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次,如:'o\{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       :单词锁定符,如: '\bgrepb\'只匹配grep。

3. 用于egrep和 grep -E的元字符扩展集

+       :匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

?       :匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

a|b|c    :匹配a或b或c。如:grep|sed匹配grep或sed

()       :分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

x{m},x{m,},x{m,n} :作用同x\{m\},x\{m,\},x\{m,n\}

5. Grep命令选项

   -a或--text   不要忽略二进制的数据。

   -A   <显示列数>--after-context=<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之后的内容。

   -b或--byte-offset    在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。

   -B<显示列数>--before-context=<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之前的内容。

   -c或--count   计算符合范本样式的列数。

   -C<显示列数>--context=<显示列数>-<显示列数>    除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

   -d<进行动作>--directories=<进行动作>    当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

   -e<范本样式>--regexp=<范本样式>    指定字符串做为查找文件内容的范本样式。

   -E或--extended-regexp    将范本样式为延伸的普通表示法来使用。

   -f<范本文件>--file=<范本文件>    指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。

   -F或--fixed-regexp    将范本样式视为固定字符串的列表。

   -G或--basic-regexp    将范本样式视为普通的表示法来使用。

   -h或--no-filename    在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

   -H或--with-filename    在显示符合范本样式的那一列之前,表示该列所属的文件名称。

   -i或--ignore-case    忽略字符大小写的差别。

   -l或--file-with-matches    列出文件内容符合指定的范本样式的文件名称。

   -L或--files-without-match    列出文件内容不符合指定的范本样式的文件名称。

   -n或--line-number    在显示符合范本样式的那一列之前,标示出该列的列数编号。

   -q或--quiet或--silent    不显示任何信息。

   -r或--recursive   此参数的效果和指定“-d recurse”参数相同。

   -s或--no-messages    不显示错误信息。

   -v或--revert-match    反转查找。

   -V或--version   显示版本信息。

   -w或--word-regexp    只显示全字符合的列。

   -x或--line-regexp    只显示全列符合的列。

   -y    此参数的效果和指定“-i”参数相同。

   --help    在线帮助。

6. 实例

    要用好grep这个工具,其实就是要写好正则表达式,下面列几个例子,讲解正则表达式的写法。

$ ls -| grep '^a'

    通过管道过滤ls -l输出的内容,只显示以a开头的行。

$ grep 'test' d*

    显示所有以d开头的文件中包含test的行。

$ grep 'test' aa bb cc

    显示在aa,bb,cc文件中匹配test的行。

$ grep '[a-z]\{5\}' aa

    显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep 'west.*\1' aa

    如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

    再讲解一个具体应用的例子。

    查询所有位于当前目录下的.cs文件中的Main,通过grep,可以轻松快速地完成这项任务,命令如下:

grep ‘Main’ *.cs

输出结果为:

ChineseDemo.cs: publicstatic void Main()

RegDemo1.cs: static voidMain(string[] args)

RegDemo2.cs:   public static void Main()

RegDemo3.cs: publicstatic void Main()

    可见,通过grep真的可以找到相关目录中符合条件的所有文件,并能打印出查询到的字符串所位于的那行内容。如果只想确定哪些文件含有Main,而不需打印相应行的内容,那么可以使用以下命令:?

grep –l‘Main’ *.cs

输出结果为:

ChineseDemo.cs

RegDemo1.cs

RegDemo2.cs

RegDemo3.cs

只有相应的文件名称被显示。

    在找到了含有Main字符串的几个文件后,如果想粗略地查看某一具体文件的里源代码的相关信息,比如查看RegDemo1.cs文件中含有Main这一行的前后三行,相关的命令如下:

grep –C 3 ‘Main’ RegDemo1.cs

输出结果为:

class GroupingApp

{

   static void Main(string[] args)

    {

       Reg7();

}

输出结果完全符合需求,static void Main(string[] args)这一行前后三行范围内的所有代码被全部打印出来(第一行是空行)。

    以上的查询字符串没有对查找结果是否为一个完整的单词进行限制,也就是说TheMain和Main_Func都会被认定为查询目标。如果想限定该查询字符串为一个完整单词,那么可以使用\w参数,相关命令如下:

grep –w‘Main’ *.cs

结果为:

ChineseDemo.cs: publicstatic void Main()

RegDemo1.cs: static voidMain(string[] args)

RegDemo2.cs: publicstatic void Main()

RegDemo3.cs: publicstatic void Main()

另外举例如下:

1)显示/etc/passwd中的一位数或两位数(锚定词首、记尾、分组、转义、次数匹配)


2)找出当前系统上用户名和默认shell相同的用户(行首、行尾锚定)(开始单词和结束单词一样)


3)grep配合其它命令的用法,找出本机的IP地址,只显示IP段(管道、cut)

[root@nmshuishui ~]# ifconfig eth0 | grep "inet addr:" | cut -d:-f2 | cut -d' ' -f1

192.168.1.102

 

参考:

1、http://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html

2、http://blog.csdn.net/huiguixian/article/details/6284834

3、http://blog.csdn.net/wealoong/article/details/8015576

4、Linux程序设计第四版


http://chatgpt.dhexx.cn/article/PI6T6m56.shtml

相关文章

黑客都怎么制作外挂?C++黑客编程收集的源码集合

VC黑客编程收集的代码&#xff1a; 打开远程telnet服务代码 浏览器 屏幕精灵 探测Windows主机的NetBIOS信息 获取asp代码的程序 聊天系统的列子 邮件发送代码 远程控制程序 sqlworm蠕虫 tini2后门代码 这些代码有的配有测试单元 &#xff0c;有的没有&#xff0c;仅…

制作外挂需要多高的编程技术?

游戏外挂和游戏开发出游戏诞生之初注定是一对生死冤家&#xff0c;正常来讲制作外挂思路比较散&#xff0c;不一定要非常高的编程技术&#xff0c;而且外挂的制作也不是一劳永逸的&#xff0c;因为游戏公司也在不停的更新修改防御规则&#xff0c;只要游戏存在外挂也会层出不穷…

利用Python制作微信跳一跳外挂,微信好友装逼神器!

导语 前几天在GitHub上看到有人利用Python玩一款名为“跳一跳”的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:Win10 Python版本:2.7.13(64位) 环境配置 Step1:安装Python 安装Python2.7并添加到环境变量中。 S…

CE+OD外挂制作实战 [提高篇]

人造指针&基址 实验目标:通过向游戏注入一段特殊汇编代码,实现自动获取动态地址.省略找基址的麻烦 为什么会出现人造指针 ? 1.基址偏移层数太多,很难找 2.有些游戏根本找不到基址 人造指针有什么优缺点? 1.人造指针就算游戏更新也无需去重复找基址 2.缺点是,需要注入代…

C/C++编程日记:制作一个简单的内存外挂

简单外挂 通过 C 语言编写一个简单的外挂&#xff0c;通过api函数修改游戏数据&#xff0c;从而实现作弊功能 对象分析 要用的 API 函数简单介绍 编写测试效果 本次游戏对象为 Super Mario XP 没有更新所以可用任意版本 试玩发现人物血量最大为 10&#xff0c;心最大为 99&…

外挂基础知识入门教学

{threadNotes} 外挂制作必备工具下载. 工具下载: peid 0.94 用于查壳,知道什么壳就可以脱壳拉. http://www.pediy.com/tools/unpack/File_analysers/peid/peid.rar OllyDbg调试器 调试游戏.http://www.pediy.com/tools/Debuggers/ollydbg/OllyICE.rarOD脱壳脚本 用…

C#简易外挂制作

【外挂修改器简单介绍】 游戏外挂分为很多种类型&#xff0c;例如本地客户端的内存修改、远程服务器的封包破解。 一般的网游由于服务器的机能限制&#xff0c;并不会将游戏产生的所有数据、计算都提供给服务器来承担。经常的&#xff0c;服务器只会将玩家人物的属性、血量、加…

旧手机改电脑外挂,文本补充

时间&#xff1a;2022/11/18 作者&#xff1a;二本双非小白 该文章主要针对小白 事情开始&#xff1a; 2022-06-02 某位华为大佬发布视频-----------旧手机改电脑外挂 视频链接:旧手机改电脑外挂-效率或将“提升300%&#xff1f;”_哔哩哔哩_bilibili 随着时间推移&…

利用Python做绝地科学家(外挂篇)

前言 玩吃鸡时间长的小盆友&#xff0c;应该晓得这游戏的体验非常差&#xff0c;特别是高端局&#xff0c;神仙满天飞。 所有今天我也要用Python写一个外挂&#xff0c;开始我的报复科学实验。 但是&#xff0c;要是。。。。。。要是被封号了&#xff0c;那就&#xff0c;那就…

外挂制作必备工具下载.

外挂制作必备工具下载. 工具下载: peid 0.94 用于查壳,知道什么壳就可以脱壳拉. http://www.pediy.com/tools/unpack/File_analysers/peid/peid.rar OllyDbg调试器 调试游戏. http://www.pediy.com/tools/Debuggers/ollydbg/OllyICE.rar OD脱壳脚本 用于脱壳. http:/…

游戏反外挂技术原理讲解

永远在路上 没有破解不了的反外挂系统&#xff0c;反外挂是一个对抗过程&#xff0c;需要不断升级。我们反外挂小组会采取对抗方式提升防御&#xff0c;也会研究竞品来获取灵感。反外挂也是非常有意思的&#xff0c;可以学到很多很多底层知识。 善战者无赫赫之功 反外挂&#x…

游戏外挂:用Python做个小游戏的开挂

小游戏开挂之路 一、工具的准备1.截屏和图像处理工具2.编辑器3.游戏原理分析二、开挂步骤1.移动鼠标2.点击鼠标3.相似图像查找原理4.实现开挂,自动做菜玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过外挂怎么制作出来的呢?现在来看一下怎么制作一个外…

网游外挂之制作流程

很多人都对网游外挂的制作很感兴趣&#xff0c;在这篇文章里&#xff0c;我向大家简单介绍一下一款网游外挂的大致制作流程。 首先&#xff0c;我想说明几点&#xff1a; 第一&#xff0c;这篇文章并不是具体教你如何写外挂&#xff0c;只是带你大致浏览一下网游外挂的制作流程…

干货!什么是游戏外挂,外挂的种类及实现原理

外挂&#xff0c;原指一切用来破坏游戏程序正常游戏数据和逻辑的工具或破解版。比如可以修改游戏内存数据的修改器&#xff0c;又比如可以修改网络数据包的抓包工具。这类外挂或多或少会影响游戏的内存数据、文件数据、网络数据&#xff0c;甚至代码逻辑。 但随着外挂市场的发…

各网游的外挂是如何做出来的?

每一个致力于学习黑客技术的人&#xff0c;最后都分为三种人。 第一种&#xff1a;入侵&#xff0c;各种入侵&#xff0c;玩的就是入侵的快感&#xff0c;或者恶作剧的喜感&#xff0c;或者那种有特殊“窥视”癖好的人……别误会&#xff0c;小编我是喜欢“恶作剧&#xff0c;…

shift后门入侵步骤

shift后门入侵 步骤 找到 C:\WINDOWS\system32\sethc.exe 文件并将其删除 在工具文件夹选项——查看中红圈中的更改了 将 C:\WINDOWS\system32\dllcache\sethc.exe删除&#xff0c;这个文件夹中放着缓存&#xff0c;如果不删除就会自动变回去找到 C:\WINDOWS\system32\cmd.exe…

windows操作系统常见持久性后门

作者&#xff1a; h0we777 免责声明&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动&#xff0c;任何后果由使用者本人负责。 0x00 简介 ​ 当我们拿到域中最高权限之后&#xff0c;就需要将自己的权限进行巩固&#xff0c;进行权限持久化操作。 0x01 隐藏账户 1…

权限持久化---映像劫持检测(Shift后门)

映像劫持说白了还是利用了windows的一些特性&#xff0c;当你点击可执行文件进行执行时&#xff0c;系统并不会直接就对可执行文件进行执行&#xff0c;而是首先对注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options&…

渗透测试模拟实战——暴力破解、留后门隐藏账户与shift粘贴键后门、植入WaKuang程序(靶机系统:Windows2008)

本次实验主要是为了应急响应打基础&#xff0c;从攻击者的角度出发&#xff0c;知己知彼&#xff0c;百战不殆 一、环境搭建 靶机&#xff1a; Windwos Server 2008 系统 靶机IP地址&#xff1a; 192.168.226.137 攻击IP地址&#xff1a; 192.168.226.1 二、模拟攻击 2.1 …

搞死虚拟机-永恒之蓝和shift后门

扫描端口&#xff1a;发现开启了445端口可能存在永恒之蓝&#xff08;ms17_010&#xff09;漏洞 nmap -sV -p- -A -v 192.168.206.129 开启msf msfconsole 搜素 search ms17_010 使用msf验证脚本&#xff0c;验证是否存在ms17_010 use auxiliary/scanner/smb/smb_ms17_010…