模式匹配运算符–Shell

转载:http://www.firefoxbug.net/?p=722

 

 

Var=/home/firefox/MyProgram/fire.login.name
${Variable#pattern}:如果模式匹配于变量值的开头处,则删除匹配的最短部分,并且返回剩下的部分
例子:
[fire]$ echo ${Var#*/}
[fire]$ home/firefox/MyProgram/fire.login.name
[fire]$ echo ${Var#/*/}
[fire]$ firefox/MyProgram/fire.login.name
[fire]$ echo ${Var#*.}
[fire]$ login.name${Variable##pattern}:如果模式匹配于变量值的开头处,则删除匹配的最长部分,并且返回剩下的部分
例子
[fire]$ echo ${Var##*/}
[fire]$ fire.login.name
[fire]$ echo ${Var##/*/}
[fire]$ fire.login.name
[fire]$ echo ${Var##*.}
[fire]$ name${Variable%pattern}:如果模式匹配于变量值的结尾处,则删除匹配的最短部分,并且返回剩下的部分
例子
[fire]$ echo ${Var%/*}
[fire]$ /home/firefox/MyProgram
[fire]$ echo ${Var%.*}
[fire]$ /home/firefox/MyProgram/fire.login${Variable%%pattern}:如果模式匹配于变量值的结尾处,则删除匹配的最长部分,并且返回剩下的部分
例子
[fire]$ echo ${Var%%/*}
[fire]$
[fire]$ echo ${Var%%.*}
[fire]$ /home/firefox/MyProgram/fire${#Variable}:返回$Variable值里的字符长度
[fire]$ echo ${#Variable}
[fire]$ 39#!/bin/bash
#移动当前目录下所有.c文件重命名为file-[Number].c,排序loop=1;
while [ $loop -lt 10 ]
do
file="$loop.c"
touch $file
let loop++
doneiCounter=1
for temp in *.c
do
New=file-$iCounter.${temp#*.}
mv $temp $New 2> /dev/nullif [ $? -eq 0 ]; then
echo "rename $temp to $New"
let iCounter++
fi
done

 

 


 

shell:字符串模式匹配

 

bash提供了可操作路径名称字符串和其它字符串的字符串模式匹配运算符。
注意区分和通配符的区别:http://blog.sina.com.cn/s/blog_ac9fdc0b0101ls9h.html
还有正则表达式的区别:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvqp.html
*********************************************************************************************
# 删除最小的匹配前缀
## 删除最大的匹配前缀
%  删除最小的匹配后缀
%% 删除最大的匹配后缀

这些运算符的语法形式如下: ${ varname op pattern } (各种括号,晕了)
注意使用# pattern必须是匹配前缀的模式;
使用%,pattern必须死匹配后缀的模式,不然会出错;
注意这里的pattern不是正则表达式
*********************************************************************************************
image
这四个操作对它们的用法表达的很清楚了,注意一点//不是正则表达式的模式,而是指匹配name中的/符号。
下面是两个应用,提取文件的前缀名:
image
**********************************************************************************************
字符串的模式匹配实际上是可以处理任何字符串的匹配,不光光只是路径名

 


Shell:通配符

 

通配符,正则表达式二者的功能很像,但是又确实不一样,接触shell有段时间了,现在才意识到它们地不同,囧Shell:通配符
    比起他们的用法,使用范围其实更加令人困惑,什么时候使用的是通配符,什么时候使用的正则表达式,一直搞不清楚。
*********************************************************************************************
通配符(模糊文件引用)
    当输入包含特色字符(也称为元字符)的部分文件名时,shell可以生成已有文件名匹配的文件名(来自《Linux命令,编辑器与shell编程》P119,难道只通配符的使用只适用于文件名的匹配?)。
    这些特殊的字符也称为通配符,当某个特殊字符作为参数出现在命令行上时,shell将该参数扩展为有序的文件名列表,并将列表传递给命令行的调用程序。包含特殊字符的文件名称为模糊文件引用,因为它们不引用任何一个特定文件,对这些文件名操作的扩展称为扩展路径名或者通配
======================================================
(1):它与已有文件名的某个单独字符匹配
image  
=======================================================
(2)*:它与文件名中的任意多个(包括0个)字符匹配
image  
=======================================================
(3)[ ]:与包含[ ]内字符的文件名进行匹配
image  
========================================================
(4)[! ]或[^ ]:表示该类与任何不在括号内的字符匹配:
image  
**********************************************************************************************
    在引用文件名的时候,使用通配符~~~Shell:通配符Shell:通配符,正则表达式的内容很长,单独写一个文章来分析。
正则表达式在这里:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvqp.html

 

 


 

 

Shell:Regex正则表达式

 

正则表达式和通配符,字符串的模式匹配是存在区别的,目前我所知道的是用在grep -E , awk , sed中。
通常使用这种结构 /pattern/ action,对匹配到pattern执行相应的action操作。
*********************************************************************************************
    正则表达式是由描述一系列字符串的简洁的符号组成,正则表达式的基本元素如下:
(1)普通字符:a-z A-Z 0-9 空格 下划线等字符;
(2)元字符:. * [ ] ^ $ { } \ + ? | ( )等特殊含义的字符;
还有扩展正则表达式,多了+ ?的元字符,但是只在grep -E中有用,sed和awk中不行
*********************************************************************************************
常规正则表达式
(1)/chenhuan/ 精确的匹配chenhuan
image
(2). 可替代任何单个字符
image
(3)* 可替代0个或多个它前面的字符(注意理解和通配符的区别)
image
因为可以匹配0个,所以比较难理解下面这几个的含义:
image
红色的表示匹配到的,注意*匹配的是和它前面的字符配套的,a*是匹配“ ”或“aaaa...”,而且注意*试图寻找最大匹配,注意理解前面的和最后.*的区别,这里的*和通配符中的*很容易搞混,其实正则表达式中.*才等于通配符中*。
(4)[ ] 字符集
.的主要限制是让你不能指定匹配的字符集,可以使用[a-zA-Z],[0-9],注意这里实际上也只是匹配一个字符:
image
(5)^ 放在[]中表示取反的意思,[^0-9]表示不匹配数字
image
(6)^放在//开头定位表达式/^chen/表示以chen开头/chen$/表示以chen结尾:
image
(7)$ 放在末尾表示精确匹配末尾
image
**********************************************************************************************
下面是扩展的正则表达式,gawk和grep -E可以识别扩展的正则表达式,sed不行
(1)? 表示前面的字符可以出现0次或1次
image
(2)+ 和*非常相似,但+前的字符必须至少出现一次
image
(3){} 为可重复的正则表达式指定一个上限
m:正则表达式准确出现m次;
m,n:正则表达式至少出现m次,至多n次;
对于gawk,需要使用--re-interval来指定使用匹配区间
image
(4)| 管道符号,实际上就是或的意思
image
(5)()聚合表达式,被()起来的正则表达式模式可以当作标准字符,就是说可以对整个组再来做处理
image

转载于:https://www.cnblogs.com/pengdonglin137/p/3524471.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VC6、BC5、G2.9标准分配器一览

目录VC6标准分配器BC5标准分配器G2.9标准分配器VC6标准分配器 VCx中源码可以在电脑路径中找: [D:\Program Files\VisualStudio\Community\VC\Tools\MSVC\14.28.29333\include\xmemory] 不过太多了。大概在837行左右有关于allocator代码。还是先看侯捷PPT上的吧。 …

css clear属性_CSS中的clear属性

css clear属性CSS | 清除财产 (CSS | clear Property) We know so much about float property and how it is used for styling our web pages. If you do not remember the float property, lets help jog your memory. The float property is used to set the elements in a …

std::alloc具体细节

G2.9 std::alloc的缺点: 1、在alloc::deallocate中没有将拿到的内存资源还给操作系统,在多任务中将占用很大资源 2、alloc::deallocate函数没有检查传入的p指针的有效性。在这里它默认p为alloc::allocate取得。 如果p并非alloc::allocate取得&#xf…

修改函数的返回地址

这篇随笔源自今天看的这篇文章http://www.cnblogs.com/bluesea147/archive/2012/05/19/2508208.html 1. 如何修改函数返回地址 今天主要写测试程序思考和验证了一下这个问题&#xff0c;先看一下这个&#xff23;程序 1 #include <stdio.h>2 void foo(){3 int a,…

从源码角度剖析VC6下的内存分配与切割的运作

目录前言1、heap初始化2、第一次分配内存&#xff0c;计算真正区块大小3、new_region管理中心4、__sbh_alloc_new_group()切割第一次分配好的内存5、开始切割内存前言 malloc与free带来的内存管理是应付小区块的&#xff0c;即SBH(small block heap)&#xff0c;这点也可以从源…

最长公共子序列求序列模板提_最长公共子序列

最长公共子序列求序列模板提Description: 描述&#xff1a; This question has been featured in interview rounds of Amazon, MakeMyTrip, VMWare etc. 这个问题在亚马逊&#xff0c;MakeMyTrip&#xff0c;VMWare等访谈轮次中都有介绍。 Problem statement: 问题陈述&…

求根号m(巴比伦算法)

巴比伦算法是针对求根号m的近似值情况的&#xff0c;它的思想是这样的&#xff1a; 设根号mX0,则如果枚举有答案X(X<X0)&#xff0c;则m/X>X0,当精度要求不高的时候&#xff0c;我们可以看成Xm/XX0,而如果精度要求比较高&#xff0c;我们只需取X和m/X的平均值作为新的枚举…

算法题复习(快排、链表、二分、哈希、双指针)

目录1、快速排序复习2、链表部分复习203. 移除链表元素707. 设计链表206. 反转链表142.环形链表 II3、二分法复习4、哈希法复习5、双指针复习**15. 三数之和****18. 四数之和****27. 移除元素****344. 反转字符串**,简单&#xff0c;双指针从两侧往中间靠拢&#xff0c;并随时s…

码农干货系列【4】--图像识别之矩形区域搜索

简介 定位某个图片的矩形区域是非常有用的&#xff0c;这个可以通过手动的选择某个区域来实现定位&#xff0c;图片相关的软件都提供了这个功能&#xff1b;也可以像本篇一个通过程序来实现智能定位。前者会有误差&#xff0c;效率低下&#xff1b;后者选区精度高&#xff0c;效…

Android中的广播Broadcast详解

今天来看一下Android中的广播机制&#xff0c;我们知道广播Broadcast是Android中的四大组件之一&#xff0c;可见他的重要性了&#xff0c;当然它的用途也很大的&#xff0c;比如一些系统的广播&#xff1a;电量低、开机、锁屏等一些操作都会发送一个广播&#xff0c;具体的And…

.NET线程池

摘要 深度探索 Microsoft .NET提供的线程池&#xff0c; 揭示什么情况下你需要用线程池以及 .NET框架下的线程池是如何实现的&#xff0c;并告诉你如何去使用线程池。 内容 介绍 .NET中的线程池 线程池中执行的函数 使用定时器 同步对象的执行 异步I/O操作 监视线程池 死锁 有关…

《c++特性》

目录多态构造函数和析构函数存在多态吗&#xff1f;虚函数表虚析构函数纯虚函数和抽象类运行时多态和编译时多态的区别继承设计实例指针对象和普通对象的区别正确初始化派生类方式继承和赋值的兼容规则protected 和 private 继承基类与派生类的指针强制转换如何用C实现C的三大特…

Scala中的while循环

在Scala中的while循环 (while loop in Scala) while loop in Scala is used to run a block of code multiple numbers of time. The number of executions is defined by an entry condition. If this condition is TRUE the code will run otherwise it will not run. Scala中…

牛客网与leetcode刷题(高频题中简单or中等的)

目录1、反转链表2、排序3、先序中序后序遍历4、最小的k个数5、子数组的最大累加和6、 用两个栈实现队列7、142. 环形链表 II8、20. 有效的括号9、最长公共子串(动态规划),磕磕绊绊10、二叉树之字形层序遍历11、重建二叉树12、LRU缓存13、合并两个有序链表15、大数加法16、一个二…

AMUL的完整形式是什么?

AMUL&#xff1a;阿南德牛奶联盟有限公司 (AMUL: Anand Milk Union Limited) AMUL is an abbreviation of Anand Milk Union Limited. It is an Indian milk product cooperative dairy organization that is based in the small town of Anand in the state of Gujarat. AMUL …

mochiweb 源码阅读(十一)

大家好&#xff0c;今天周六&#xff0c;继续接着上一篇&#xff0c;跟大家分享mochiweb源码。上一篇&#xff0c;最后我们看到了mochiweb_socket_server:listen/3函数&#xff1a; listen(Port, Opts, State#mochiweb_socket_server{sslSsl, ssl_optsSslOpts}) ->case moch…

Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/9255575 最 近项目中需要用到ListView下拉刷新的功能&#xff0c;一开始想图省事&#xff0c;在网上直接找一个现成的&#xff0c;可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理 想。有…

红黑树的实现

目录1、红黑树原理1、红黑树性质2、变换规则&#xff08;从插入结点的角度来讲&#xff09;1.变色2.左旋3.右旋3、删除结点需要注意的地方2、代码1、定义结点以及构造函数2、定义红黑树类以及声明它的方法3、左旋4、右旋5、插入操作6、修正操作7、删除操作3、参考链接1、红黑树…

118 - ZOJ Monthly, July 2012

http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId339 都是赛后做的。。。弱爆了 A题是找由2和5组成的数字的个数 直接打个表就行了 只是比赛的时候不知道怎么打表啊。。 View Code #include<cstdio> #include<cstring> #include<algorith…

edp1.2和edp1.4_EDP​​的完整形式是什么?

edp1.2和edp1.4EDP​​&#xff1a;电子数据处理 (EDP: Electronic Data Processing) EDP is an abbreviation of Electronic Data Processing. It alludes to the functioning of operations of commercial data, documents processing of storing, with the use of a compute…