外国人学做中国菜 网站,沈阳今天重大新闻,泽州网站设计,房山重庆网站建设转载#xff1a;http://www.firefoxbug.net/?p722 Var/home/firefox/MyProgram/fire.login.name
${Variable#pattern}:如果模式匹配于变量值的开头处#xff0c;则删除匹配的最短部分#xff0c;并且返回剩下的部分
例子#xff1a;
[fire]$ echo ${Var#*/}
[fire]$ home/… 转载http://www.firefoxbug.net/?p722 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排序loop1;
while [ $loop -lt 10 ]
do
file$loop.c
touch $file
let loop
doneiCounter1
for temp in *.c
do
Newfile-$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不是正则表达式 ********************************************************************************************* 这四个操作对它们的用法表达的很清楚了注意一点//不是正则表达式的模式而是指匹配name中的/符号。 下面是两个应用提取文件的前缀名 ********************************************************************************************** 字符串的模式匹配实际上是可以处理任何字符串的匹配不光光只是路径名 Shell通配符 通配符正则表达式二者的功能很像但是又确实不一样接触shell有段时间了现在才意识到它们地不同囧 。 比起他们的用法使用范围其实更加令人困惑什么时候使用的是通配符什么时候使用的正则表达式一直搞不清楚。 ********************************************************************************************* 通配符模糊文件引用 当输入包含特色字符也称为元字符的部分文件名时shell可以生成已有文件名匹配的文件名来自《Linux命令编辑器与shell编程》P119难道只通配符的使用只适用于文件名的匹配。 这些特殊的字符也称为通配符当某个特殊字符作为参数出现在命令行上时shell将该参数扩展为有序的文件名列表并将列表传递给命令行的调用程序。包含特殊字符的文件名称为模糊文件引用因为它们不引用任何一个特定文件对这些文件名操作的扩展称为扩展路径名或者通配。 1它与已有文件名的某个单独字符匹配 2*它与文件名中的任意多个包括0个字符匹配 3[ ]与包含[ ]内字符的文件名进行匹配 4[! ]或[^ ]表示该类与任何不在括号内的字符匹配 ********************************************************************************************** 在引用文件名的时候使用通配符正则表达式的内容很长单独写一个文章来分析。 正则表达式在这里http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvqp.html ShellRegex正则表达式 正则表达式和通配符字符串的模式匹配是存在区别的目前我所知道的是用在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聚合表达式被起来的正则表达式模式可以当作标准字符就是说可以对整个组再来做处理 转载于:https://www.cnblogs.com/pengdonglin137/p/3524471.html