博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
十 字符串处理
阅读量:5308 次
发布时间:2019-06-14

本文共 5274 字,大约阅读时间需要 17 分钟。

 

字符串截取

 

 

字符串截取            格式使用${}表达式         ${
var:起始位置:长度};编号从0开始,可省略使用expr substr expr substr "$var" 起始位置 长度;起始位置编号从1开始使用cut工具     echo $var | cut -b 起始位置-结束位置;起始位置编号从1开始

 

 

字符串的匹配删除

 

 

 格式                         ${变量名#*关键词}      从左到右,最短匹配删除;#用来删除头部,*通配 ${变量名##*关键词}     从左到右,最长匹配删除;#用来删除头部,*通配    ${变量名%关键词*}      从右到左,最短匹配删除;%用来删除尾部,*通配    ${变量名%%关键词*}     从右到左,最长匹配删除;%用来删除尾部,*通配

 

 

文件批量改名

 

 

 

例子:将扩展名.doc改为.txt

 

#!/bin/bashfor FILE in *.docdo  mv $FILE ${FILE%.doc}.txtdone

 

 

字符串的替换

 

 

 

 

 

格式${
var/old/new}           只替换第一个匹配结果 ${
var//old/new}          替换全部匹配结果 ${string/#substring/replace}   如果$string前缀匹配$substring,就用$replace来代替匹配$substring ${
string/%substring/replace}   如果$string后缀匹配$substring,就用$replace来代替匹配$substring

 

 

依次举例说明:定义OLDBOY变量,内容为”I am oldboy”I am oldboy1)返回字符串OLDBOY变量字符串的长度[root@Web ~]# echo ${#OLDBOY}11[root@Web ~]# echo ${OLDBOY} |wc -m122)截取OLDBOY变量字符串从第2个字符之后开始取,默认取后面字符的全部,第2个字符不包括在内。也可理解为删除前面的多少个字符[root@Web ~]# echo ${OLDBOY:2}am oldboy 3)截取OLDBOY变量字符串从第2个字符之后开始取,取两个字符。[root@Web ~]# echo ${OLDBOY:2:2}am提示:类似cut -c参数[root@Web ~]# echo ${OLDBOY}|cut -c 1-4I am[root@Web ~]# echo ${OLDBOY}|cut -c 3-4am4)从变量$OLDBOY开头开始删除最短匹配”I am”子串[root@Web ~]# echo ${OLDBOY#I am}oldboy 5)从变量$OLDBOY开头开始删除最长匹配”I am old”子串[root@Web ~]# echo ${OLDBOY##I am old}boy6)从变量$OLDBOY结尾开始删除最短匹配oldboy子串[root@Web ~]# echo ${OLDBOY%oldboy}I am7)从变量$OLDBOY结尾开始删除最长匹配boy子串[root@Web ~]# echo ${OLDBOY%%boy}I am old8)使用etiantian字符串,来代替变量$OLDBOY第一个匹配的oldboy字符串[root@Web ~]# echo ${OLDBOY/oldboy/etiantian}I am etiantian 9)使用etiantian字符串,来代替变量$OLDBOY结尾匹配的oldboy字符串[root@Web ~]# echo ${OLDBOY/%oldboy/etiantian}I am etiantian10)使用He is字符串,来代替从变量$OLDBOY开头开始匹配的I am字符串[root@Web ~]# echo ${OLDBOY/#I am/He is}He is oldboy

 

 

生产场景用法实例:

1)变量结尾删除生产实践:

 

功能描述如下表:

 

 

批量文件改名案例实践:问题1:把下面所有的文件名中的finishied内容去掉。[root@localhost ~]# mkdir /test[root@localhost ~]# cd /test[root@localhost test]# cat a.log stu_102999_2_finish.jpgstu_102999_3_finish.jpgstu_102999_4_finish.jpg[root@localhost test]# for f in `cat a.log`;do touch $f;done[root@localhost test]# ll总用量 4-rw-r--r--. 1 root root 72 3月  30 22:24 a.log-rw-r--r--. 1 root root  0 3月  30 22:25 stu_102999_2_finish.jpg-rw-r--r--. 1 root root  0 3月  30 22:25 stu_102999_3_finish.jpg-rw-r--r--. 1 root root  0 3月  30 22:25 stu_102999_4_finish.jpg[root@localhost test]# cat p.sh for f in `ls *.jpg` do     mv $f `echo ${f%finish*}.jpg`done[root@localhost test]# ll总用量 8-rw-r--r--. 1 root root 72 3月  30 22:24 a.log-rw-r--r--. 1 root root  0 3月  30 22:24 cat-rw-r--r--. 1 root root 64 3月  30 22:49 p.sh-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_2_.jpg-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_3_.jpg-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_4_.jpg

 

 

2)变量结尾替换生产实践:

 

 

问题:把下面文件的大写扩展名变小写扩展名[root@localhost test]# cat p.shfor f in `ls *.jpg` do     mv $f `echo "${f/%jpg/JPG}"`done[root@localhost test]# sh p.sh[root@localhost test]# ll总用量 8-rw-r--r--. 1 root root 72 3月  30 22:24 a.log-rw-r--r--. 1 root root  0 3月  30 22:24 cat-rw-r--r--. 1 root root 63 3月  30 22:52 p.sh-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_2_.JPG-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_3_.JPG-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_4_.JPG

 

 1 命令名称:rename-Rename files

2 命令功能:给文件重命名

3命令语法: rename from to file 提示:这里的用法”from to file”一开始会被大家误解,实际上还是看下面表格吧:

 

 

 

还是看实际例子吧!

准备测试数据:

 

[root@Web ~]# mkdir /test[root@Web ~]# cd /test[root@Web test]# for f in `seq 9`;do touch foo$f.htm;done[root@Web test]# ls -l总用量 0-rw-r--r--. 1 root root 0 4月  12 21:58 foo1.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo2.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo3.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo4.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo5.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo6.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo7.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo8.htm-rw-r--r--. 1 root root 0 4月  12 21:58 foo9.htm[root@localhost test]# rename .JPG .htm *.JPG[root@localhost test]# ll总用量 8-rw-r--r--. 1 root root 72 3月  30 22:24 a.log-rw-r--r--. 1 root root  0 3月  30 22:24 cat-rw-r--r--. 1 root root 63 3月  30 22:52 p.sh-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_2_.htm-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_3_.htm-rw-r--r--. 1 root root  0 3月  30 22:48 stu_102999_4_.htm[root@localhost test]# rename 102999 oldboy *.htm[root@localhost test]# ll总用量 8-rw-r--r--. 1 root root 72 3月  30 22:24 a.log-rw-r--r--. 1 root root  0 3月  30 22:24 cat-rw-r--r--. 1 root root 63 3月  30 22:52 p.sh-rw-r--r--. 1 root root  0 3月  30 22:48 stu_oldboy_2_.htm-rw-r--r--. 1 root root  0 3月  30 22:48 stu_oldboy_3_.htm

 

 

 

变量初值处理

 

 

 

取值

 

 

取值,${

var:-word}

 

 

若变量var已存在且非null,则返回$var的值否则返回字串"word",变量var值不变用途: 如果变量没定义 返回默认值

 

 

赋值

 

赋值,${var:=word}

若变量var已存在且非null,则返回$var的值否则返回字串"word",并赋值给变量var用途: 如果变量没定义 给变量赋值

 

 

 

 

 

有值时提示

 

 

 

有值时提示,${var:+"提示信息"}

若变量var已存在且非null,则给出提示否则返回NUll(空值)用途 : 测试变量是否定义

 

 

 

无值时提示

 

 

 

无值时提示,${var:?"提示信息"}

若变量var已存在且非null,则返回$var的值否则给出提示信息(若省略,则用默认提示)用途: 捕捉由于变量未定义所导致的错误

 

 

 

练习:

 

a、提示输入一个正整数x,求从1x的和

 

b、若用户未输入值(直接回车),则赋值x=1

 

#!/bin/bashread -p "请输入一个正整数:" xx=${x:-1};i=1;SUM=0while [ $i -le $x ]do  let SUM+=i;let i++doneecho "从1到$x的总和是:$SUM"

 

 

 

 

 

例题:

 

mycluster.sh

 

检查集群中主机的物理连接状态,要求如下

 

能够设置检查主机的台数 和 检查哪些主机

 

把不在线主机的ip地址和时间保存到/clusterdir目录下的stat.txt文件里并把不在线主机的ip地址 时间 台数 输出到屏幕上

 

 

 

 

转载于:https://www.cnblogs.com/zhongguiyao/p/8984881.html

你可能感兴趣的文章
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
和小哥哥一起刷洛谷(1)
查看>>
遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
查看>>
SqlBulkCopy大批量导入数据
查看>>
pandas 修改指定列中所有内容
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>