模式匹配运算符–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++
done iCounter=1
for temp in *.c
do
New=file-$iCounter.${temp#*.}
mv $temp $New 2> /dev/null if [ $? -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不是正则表达式
*********************************************************************************************
这四个操作对它们的用法表达的很清楚了,注意一点//不是正则表达式的模式,而是指匹配name中的/符号。
下面是两个应用,提取文件的前缀名:
**********************************************************************************************
字符串的模式匹配实际上是可以处理任何字符串的匹配,不光光只是路径名
Shell:通配符
通配符,正则表达式二者的功能很像,但是又确实不一样,接触shell有段时间了,现在才意识到它们地不同,囧 。
比起他们的用法,使用范围其实更加令人困惑,什么时候使用的是通配符,什么时候使用的正则表达式,一直搞不清楚。
*********************************************************************************************
通配符(模糊文件引用)
当输入包含特色字符(也称为元字符)的部分文件名时,shell可以生成已有文件名匹配的文件名(来自《Linux命令,编辑器与shell编程》P119,难道只通配符的使用只适用于文件名的匹配?)。
这些特殊的字符也称为通配符,当某个特殊字符作为参数出现在命令行上时,shell将该参数扩展为有序的文件名列表,并将列表传递给命令行的调用程序。包含特殊字符的文件名称为模糊文件引用,因为它们不引用任何一个特定文件,对这些文件名操作的扩展称为扩展路径名或者通配。
======================================================
(1)?:它与已有文件名的某个单独字符匹配
=======================================================
(2)*:它与文件名中的任意多个(包括0个)字符匹配
=======================================================
(3)[ ]:与包含[ ]内字符的文件名进行匹配
========================================================
(4)[! ]或[^ ]:表示该类与任何不在括号内的字符匹配:
**********************************************************************************************
在引用文件名的时候,使用通配符~~~,正则表达式的内容很长,单独写一个文章来分析。
正则表达式在这里: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
(2). 可替代任何单个字符
(3)* 可替代0个或多个它前面的字符(注意理解和通配符的区别)
因为可以匹配0个,所以比较难理解下面这几个的含义:
红色的表示匹配到的,注意*匹配的是和它前面的字符配套的,a*是匹配“ ”或“aaaa...”,而且注意*试图寻找最大匹配,注意理解前面的和最后.*的区别,这里的*和通配符中的*很容易搞混,其实正则表达式中.*才等于通配符中*。
(4)[ ] 字符集
.的主要限制是让你不能指定匹配的字符集,可以使用[a-zA-Z],[0-9],注意这里实际上也只是匹配一个字符:
(5)^ 放在[]中表示取反的意思,[^0-9]表示不匹配数字
(6)^放在//开头定位表达式/^chen/表示以chen开头,/chen$/表示以chen结尾:
(7)$ 放在末尾表示精确匹配末尾
**********************************************************************************************
下面是扩展的正则表达式,gawk和grep -E可以识别扩展的正则表达式,sed不行
(1)? 表示前面的字符可以出现0次或1次
(2)+ 和*非常相似,但+前的字符必须至少出现一次
(3){} 为可重复的正则表达式指定一个上限
m:正则表达式准确出现m次;
m,n:正则表达式至少出现m次,至多n次;
对于gawk,需要使用--re-interval来指定使用匹配区间
(4)| 管道符号,实际上就是或的意思
(5)()聚合表达式,被()起来的正则表达式模式可以当作标准字符,就是说可以对整个组再来做处理
模式匹配运算符–Shell的更多相关文章
- 替换运算符 shell
${变量:-word}如果变量存在且非空,则返回其值:否则返回word 用于:如果变量未定义,则返回默认值即word ${变量:+word}如果变量 ...
- Linux Shell常用技巧(十一)
二十二. 交互式使用Bash Shell: 1. 用set命令设置bash的选项: 下面为set主要选项的列表及其表述: 选项名 开关缩写 描述 allexport -a 打开此开关, ...
- linux 9 -- 交互式使用Bash Shell
二十二. 交互式使用Bash Shell: 1. 用set命令设置bash的选项: 下面为set主要选项的列表及其表述: 选项名 开关缩写 描述 allexport -a 打开此开关 ...
- [Linux]Shell的运算符和特殊变量
说起Shell脚本,免不了用变量.特别是对于这种一堆符号表示变量的语言来说,你不了解一下相关变量的本意,根本无从下手.譬如写个循环遍历,$#就起了好大作用.所以还是有必要记录一下,也是对学习的一个笔记 ...
- Linux基础之-shell script(变量,运算符,流程控制,函数)
一.shell script Shell 脚本(shell script),是一种为shell编写的脚本程序.业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell s ...
- Shell基础:变量类型 & 运算符
Shell变量 Shell支持三种类型的变量 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写. 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$ ...
- Linux学习——shell编程之运算符
shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...
- Shell教程 之运算符
1.Shell基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符: 关系运算符: 布尔运算符: 字符串运算符: 文件测试运算符. 原生bash不支持简单的数学运算,但是可以 ...
- Shell学习心得(二):传递参数、运算符
1.传递参数 可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 向脚本传递三个参数, ...
随机推荐
- MVC中modelstate的使用
MVC中ModelState类需要引用 System.Web.Mvc命名空间,在 System.Web.Mvc.dll 中. 属性 Errors 返回一个 ModelErrorCollection 对 ...
- PackageManager获取版本号
PackageInfo代表的是关于一个包的所有信息,就相当于一个APP应用的清单文件中收集到的所有信息. 通过这个类我们就可以获取类似版本号等一些信息. /** * 得到应用程序的版本名称 */ pr ...
- bzoj 1458 士兵占领(最大流)
[题意] n行m列,第i行必须放L[i],第j列必须放C[j],有障碍格,求满足条件至少需要放多少. [思路] 至少放多少等价于最多不放多少. 对行列分别建XY点,则连边(S,Xi,a)(Yi,T,b ...
- (转载)OC学习篇之---类的初始化方法和点语法的使用
昨天介绍了OC中类的定义和使用,今天我们来继续学习类的初始化方法和点语法的使用. 一.首先来看一下类的初始化方法 在Java中我们知道一个每个类都有构造方法,这里的初始化方法就是和构造方法一个概念的, ...
- 瞬间从IT屌丝变大神——CSS规范
CSS规范主要包括以下内容: CSS Reset用YUI的CSS Reset. CSS采用CSSReset+common.css+app.css的形式. app.css采用分工制,一个前端工程师负责一 ...
- Tkinter教程之Entry篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811302 #Tkinter教程之Entry篇#Entry用来输入单行文本'''1.第一个En ...
- linux vim用法总结
1.跳转到指定行 编辑模式下:输入 ngg或nG(n代表行数) 命令模式下:输入 :n(n代表行数) 2.查找命令 命令模式下输入 / 后面加上查找的内容 例如 :/name (查找 ...
- 关于登录的会话控制, 终极解决方案 - chunyu
登录是用cookie还是session实现,一直有争议,普遍认为session更安全,可是有些功能,用cookie最方便也最高效,比如“记住我一周”. cookie还是session,我的答案是两 ...
- 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...
- 第二百九十七天 how can I 坚持
算是在家宅了一天吧,下午睡了会觉,晚上一起做了个饭,中午一起吃的炒菜和徐斌他同学. 还是那么冷啊. 整天都是东扯西扯的. 睡觉. 忘了件重要的事,就是今天第一次喝鸡尾酒,还有,常人之所以是常人,不是因 ...