$expr “2009 : ‘..(..)’
在实现这个功能的时候,笔者使用了这个转义字符 。这个正则表达式的含义就表示只考虑前面这个字符串的最后两个字符,而忽略其他的字符 。若需要利用上面这个规则来进行文件命令的话,只需要先利用这个命令截取年份的最后两位,然后再把月份加上去即可 。上面的字符串2009系统工程师也可以使用变量来代替 。系统工程师需要注意的是这个正则表达式的书写方法 。在使用expr命令来对字符串进行处理,其难点就在于这个正则表达式的书写 。通常情况下,只要合理编写这个正则表达式,则其字符串的处理功能,并不会比数据库系统中字符串处理函数来的差,甚至有过之而不及 。现在的主要问题是,由于经验有限,系统工程师往往很难根据用户需求来定义这个正则表达式 。就连笔者有时候也会在这里卡住 。如果系统工程师想要提高自己正则表达式的书写能力,那么多看看其他系统工程师书写的脚本,往往能够在最短时间内提高自己正则表达式的书写水平 。
三、修改文件的扩展名 。
如现在操作系统中某个目录下面有很多的sh文件(Unix系统中的配置文件,其实跟txt相同) 。现在系统工程师需要将这些sh文件的扩展名改掉,全部改为txt 。虽然可以通过一个个的手工修改来实现,但是处理起来的难度比较大 。
如果要实现批量更改文件扩展名的话,则可以借助for等循环语句来实现 。不过循环语句内部的操作有两种实现方式 。一是采用expr命令 。其实对文件名进行操作,说到底就是对字符串的操作 。因为文件名字也是一种字符串 。如系统工程师可以先利用expr命令截取字符串的功能,将扩展名前面的字符串截取出来,然后将其保存在一个变量中,如filenameshort 。然后再利用系统的重命名或者移动文件的命令,对系统进行重命名,如$filenameshortdoc 。这就可以实现更改扩展名的需求 。不过笔者并不建议采用这个expr命令来完成这个需求 。因为当文件名的长度不固定时,这个正则表达式比价难写 。要将文件名字符串截取出来(去掉扩展名的名字),有一定的难度 。
在这里,笔者介绍另外一个命令basename命令 。其实这也是一个字符串相关的处理命令 。其基本格式为basename text1 text2 。他的基本功能就是从第一个字符串中去掉第二个字符串的内容 。如执行命令basename setup.sh sh,则就表示将setup.sh这个字符串中的sh字符串去掉,变为setup. 。那么此就可以利用这个命令来进行成批修改扩展名 。其具体的实现方式跟上面类似 。只是在截取文件名字符串的时候,采用了basename命令,而不是expr命令 。而basename命令本身就带有截取字符串的功能,不需要采用正则表达式 。所以实现起来相对简单一点 。
【Unix操作系统中处理字符串问题的简单方式】从这个案例中,笔者也想再次强调一下一个字符串处理的基本原则 。即无论是截取字符串还是对字符串进行的其他操作,如果可以通过系统命令 可选项参数来实现的,就采用这种实现方式 。如果没有的话,需要考虑能否采用basename等不需要正则表达式的命令来实现 。只有在以上两种方式都不可行的情况下,才考虑使用exper命令来实现 。这主要是因为正则表达式的设计实在比较麻烦,虽然其功能比较强大 。利用exper来统计一下字符串的长度还好,但是如果要实现一些复杂功能,如截取字符串或者确定字符的位置,就需要系统工程师有比较深厚的功底了 。
推荐阅读
- vivoz1中添加联系人的简单步骤
- iqoo手机中将开发者模式开启具体操作步骤
- 鹿客智能门锁q2中设置一次性密码的简单步骤
- 华为p30pro中将后台应用关掉具体操作步骤
- vivoz1中添加桌面小挂件的操作步骤
- 我心目中的MPX200
- iPad中拆电池具体操作步骤
- SCO unix三种安装BTLD的方式
- ios12中打开就寝模式的操作步骤
- UNIX及SYBASE的安装