PowerShell中正则表达式使用例子

本文介绍PowerShell中正则表达式的使用,PowerShell的正则表达式与微软其它语言的正则表达式是一样的,使用非常方便。

正则表达式本身是怎么回事,本文不做讨论,反正PowerShell还是用的微软的那一套正则表达式规则,学VB、ASP、C#等语言时都应该学过。我们只谈谈在PowerShell中,怎么去用正则表达式。

先给出一个任务,使用PowerShell在d:\1.txt文件中,找到夹在数字串中的字母串。1.txt的内容如下:

代码如下:

1
12
12aaa3
123bbb4
123ccc45

我们是要把aaa bbb ccc找出来。

先上程序:

代码如下:

$file = Get-Content "d:\1.txt"
$reg = "\d+(?<alp>\w+?)\d+"
foreach($line in $file){
   if($line -match $reg){       
       #$Matches[0];
       $Matches.alp;
   }
}

下面逐一解释:

1、Get-Content是得到一个文件的内容,将其赋值给$file变量
2、$reg是一个正则表达式,但注意括号里面(?<alp>\w+?),“\w+?”这段不陌生,非贪婪的匹配Alpha字符。“?<alp>”这段与正则表达式本身无关,它是PowerShell弄出来比较方便的获取括号内的匹配值的一个变量。这句有点绕,简单的说,它制造了一个变量,这个变量的值是括号内的正则表达式匹配到的值,即“\w+?”匹配到的值。我们以前学C#的时候,知道用match.Group[n]来获取括号内的值。这里是同样的道理。如果有多个括号,则可以为每个括号设置一个变量。
3、if($line -match $reg) 判断字符串是否符合正则表达式,返回值为$True或$False
4、$Matches.alp,这个就是对第2步的调用了,alp这个变量作为$Matches这个对象的一个成员变量了。
5、$Matches[0],这个匹配到的完整的字符串的值,$Matches.alp是括号中的值。

正则表达式的使用,基本这样就可以满足需要了。但后面遇到新的东西,我再添加上来。

(0)

相关推荐

  • linux shell 路径截取正则表达式

    最近写脚本,需要对脚本中函数传递的路径参数进行截取,发现了以下比较好用的方法,记录下: file=/dir1/dir2/dir3/my.file.txt 我们可以用${ }分别替换获得不同的值: ${file#*/}:拿掉第一条/及其左边的字串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条/及其左边的字串:my.file.txt ${file#*.}:拿掉第一个.及其左边的字串:file.txt ${file##*.}:拿掉最后一个.及其左边的字串:

  • PowerShell中使用正则和ValidateSet验证参数合法性

    适用于PowerShell 2.0或着更高版本 当你使用PowerShell 创建了一个函数时,要确保你告诉PowerShell 你的参数期望什么样的值.比如你想用户输入星期 复制代码 代码如下: function Get-Weekday {   param   (     $Weekday   )      "You chose $Weekday" } 此时用户可以输入任何值,即使这个值不是一个合法的星期,比如星期七 复制代码 代码如下: PS> Get-Weekday -We

  • Shell if中的正则表达式使用详解

    由于工作需要对用户提交的数据进行验证,这是一个简单的日期正则验证实例,有需要了解的同学可参考. shell中的if语句需要做一个正则判断,查了一下语法记录之. DATEPATTERN="^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$" if [[ "$STARTDATE" =~ $DATEPATTERN ]] && [[ $ENDDATE =~ $DATEPATTERN ]]; then : else echo "date

  • Powershell学习笔记--使用正则表达式查找文件

    支持所有PS版本 Get-ChildItem 不支持文件高级筛选.它只能使用简单的通配符,但不能使用正则表达式. 围绕这个问题,我们可以使用-match命令来筛选. 下面这个例子将获得所有windows目录下包含至少连续有两个数字的文件同时文件名长度不超过8个字符: Get-ChildItem -Path $env:windir -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.BaseName -match '\d{2}' -

  • PowerShell使用正则表达式查找字符串实例

    本文介绍在PowerShell中使用-match运算符加正则表达式,进行字符串的搜索. match运算符,后面加上正则表达式,可以对字符串进行正则匹配查找.正则表达式功能强大,用于查找字符串时方便快捷.所以match运算符是我们经常要用到的一个知识.match查找的结果也是布尔值类型,即True或False,表示匹配成功或匹配失败. 下面举例说明: "123"是以"1"开头 复制代码 代码如下: PS C:\Users\spaybow> "123&q

  • Shell正则表达式之grep、sed、awk实操笔记

    最近一直在研究shell脚本这块,刚好闲下来整了下自己手头上比较好的资料中的一些范例,以下是我整理的鸟哥私房菜里面正则表达式里面比较基础的一些语法详解,适合新手查阅. 首先先复制一段范例: 复制代码 代码如下: # vi regular_express.txt ------------------------------- "Open Source" is a good mechanism to develop programs. apple is my favorite food.

  • shell脚本正则匹配文件中的Email并写入到文件中代码分享

    代码如下: 复制代码 代码如下: #! /bin/bashfunction read_file(){    for line in `cat $1`    do        if [ `echo $line |grep "^[a-zA-Z0-9_-]*@[A-Za-z_-]*\.[a-zA-Z_-]*$"` ];then            echo $line >> result.txt        else            echo "---&qu

  • linux shell 正则表达式(BREs,EREs,PREs)差异比较

    在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen.这些

  • shell 正则表达式详细整理

    正则表达式的分类 1.基本的正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs) 2.扩展的正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs) 3.Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx 简称PREs) 具体的可以参考这篇文章:http://www.jb51.net/tools/shell_regex.html shell常

  • Shell正则表达式学习笔记

    正规表示法(或称为常规表示法)是透过一些特殊字符的排列,用以搜寻/取代/删除一列或多列文字字符串, 简单的说,正规表示法就是用在字符串的处理上面的一项『表示式』.正规表示法并不是一个工具程序, 而是一个字符串处理的标准依据,如果您想要以正规表示法的方式处理字符串,就得要使用支持正规表示法的工具程序才行, 这类的工具程序很多,例如 vi, sed, awk 等等. 一.正则表达式是什么? 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作. 二.

随机推荐