一.字符串的处理
1.字符串截取
1.1 s{}表达式 ${变量名:起始位置:长度} (从0开始)
n=number (n="number")
echo ${#n} ----> 6
echo ${n:0:4}----> numb
echo ${n:1:3} ---> umb
1.2 使用 expr substr 格式:expr substr "$变量名" 起始位置 长度(从1开始)
n=number
expr substr "$n" 1 3 -----> num
expr substr "$n" 2 5 -----> umber
1.3 方式三,使用cut分割工具(从1开始)
格式:echo $变量名 | cut -b 起始位置-结束位置 可省略任何一个
(编号也是从1开始,与expr类似),当省略结束位置时,视为截取到最后
选项 -b 表示按字节截取字符,其中起始位置、结束位置都可以省略。当省略起始位置时,视为从第1个字符开始
n=number
echo $n ----> number
echo $n | cut -b 1-3 ----> num
echo $n | cut -b -3 ----> num
echo $n | cut -b 1- ----> number
echo $n | cut -b 1,3,5 ----> nme
2.字符串的替换 n=13152098678
2.1 替换第一个
echo ${n/8/x} ----> 1315209x678
2.2 替换全部
echo ${n//8/x} ----> 1315209x67x
3.字符串的删除
A=`head -1 /etc/passwd` echo A=root:x:0:0:root:/root:/bin/bash
3.1 从左向右,最短距离匹配 格式:${A#*key}
echo ${A#*:} --->x:0:0:root:/root:/bin/bash 删除了:root:
3.2从左向右,最长距离匹配 格式:${A##*key}
echo ${A##*:} --->/bin/bash 删除了:root:x:0:0:root:/root:
3.3 从右向左,最短匹配删除 格式:${A%key*}
echo ${A%:*} ---> root:x:0:0:root:/root 删除了::/bin/bash
3.4 从右向左,最长匹配删除 格式:${A%%key*}
echo ${A%%:*} ---> root 删除了::x:0:0:root:/root:/bin/bash
案例: 批量修改文件名
案例:字符串拼接:
1. a=f
y被定义: 2. y=$a y=f (1-2步骤等同于:y=$y$a,即可以直接定义赋值)
y=$y$a y=ff
y=$y$a y=fff
... ...
二.字符串初值的处理
1.常见方法 xx=11
1.1 只取值 格式:${var:-word}
若变量var已存在且非空,则返回$var的值,否则返回字符串“word",原变量var不受影响
echo ${xx:-123qwe} ----> 11
echo ${yy:-456qwe} ----> 456qwe
案例:编写脚本,从1叠加求和用户输入的一个值(初值)
#!/bin/bash
read -p "Please input a number:" num
num=${num:-1}
echo $num
s=0
i=0
while [ $i -lt $num ]
do
let i++
let s+=i
done
echo $s
1.2 数组的定义
# x=(11 22 33)
# echo $x ---> 11
# echo ${x[2]} ---> 33
# x[1]=22
# echo ${x[1]} ---> 22
# echo ${x[@]} ---> 11 22 33
# echo ${#x[@]} 数组长度
# echo ${x[@]:起始下标:元素个数}
# 数组的另一种赋值方法:
m[0]=aaa
m[1]=bbb
...
三.expect预期交互
#!/bin/bash
expect << EOF #开始
spawn ssh 176.233.6.123
expect "password:" { send "Taren1\r" }
expect "#" { send "mkdir /opt/zhangkai\r" }
expect "#" { send "exit\r" }
EOF #结束
四.正则表达式
1.egrep过滤工具
基本用法:egrep [选项] '正则表达式' 文件
前值命令 | egrep [选项] '正则表达式'
grep -E 标示允许使用扩展的正则表达式
-i 忽略字母大小写
-v 条件取反
-c 统计匹配的行数
-q 无任何输出,一般用于检测($?)
-n 显示出匹配结果所在的行号
--color 标红显示匹配字串
# grep -c root /etc/passwd (输出的是一共匹配的行数)
# grep --color root /etc/passwd
2.基本元素处理
2.1 行首/行尾/单字匹配
^ 匹配行首 ^abc 以abc开头的行
$ 匹配行尾 abc$ 以abc结尾的行
^$ 空行
[ ] 匹配集合中任意单个字符
[ ^ ] 对集合取反
. 单个字符 . 除过“\n”以外的任意单个字符
\{n,m\} 匹配任一个字符n-m次 (优先匹配大数,依次往小去匹配)
示例:egrep '^#' /etc/inittab
egrep -c '/bin/bash$' /etc/passwd == egrep '/bin/bash$' /etc/passwd | wc -l =5(行数)
egrep -m10 '/sbin/nologin$' /etc/passwd (只匹配10行,不是前10行,是中标后列出中标的10行)
grep -v '.' /etc/rc.local == egrep '^$' /etc/rc.local
grep -n 'a\{3,4\} --->aaa aaaa aaa
grep -n 'a\{3,\} ---> aaa (匹配3次及3次以上,由高往底匹配)g
(.表示有一个字就行,前面-v表示一个字都没有,即空行)
2.2 +、?、* -----> 目标出现的次数
类型 含义 示例 说明
+ 最少匹配一次 a+ 一个或多个连续的a
(abc)+ 一个或多个连续的abc
? 最多匹配一次 a? 0个或1个a
(abc)? 0个或1个abc
* 匹配任意次数 a* 0个或多个连续的a
(abc)* 0个或多个连续的abc
.* 任意长度的任意字符串
2.3 限定次数
- shell截取字符串的方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...
- shell基础——字符串处理(转载)
Shell的字符串处理 1 得到长度 %x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} ...
- 零基础学Python--------第5章 字符串及正则表达式
第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的 ...
- Shell学习之结合正则表达式与通配符的使用(五)
Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...
- R5—字符串处理/正则表达式
R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...
- C#高级编程9-第9章 字符串和正则表达式
字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...
- shell中字符串操作【转】
转自:http://blog.chinaunix.net/uid-29091195-id-3974751.html 我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,当然shell编程也不例 ...
- shell之文本过滤(正则表达式)
shell之文本过滤(正则表达式) 分类: linux shell脚本学习2012-09-14 12:59 213人阅读 评论(0) 收藏 举报 当从一个文件或命令输出中抽取或过滤文本时,可以使用正则 ...
- shell截取字符串的8种方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...
随机推荐
- C++中如何记录程序运行时间
一.clock()计时函数clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下:clock_t clock(void) ;简单而言, ...
- 2019版UI学习路线(含大纲+视频+工具+网盘+面试题)
2019最新UI设计师教程(学习路线+课程大纲+视频教程+面试题+学习工具) 什么是全链路UI设计 UI设计师是随着网络而兴起的新兴设计行业,从事对软件的人机交互.操作逻辑.界面美观的整体设计工作.涉 ...
- .NET CORE 下 MariaDB DBfirst 生成model层 并配置连接参数
1.首先新建一个类库,然后通过NuGet安装下面三个包 2.然后在程序包管理器控制台中运行以下代码(ps:记得默认项目选择刚才新建的项目,同时设置为启动项) server 是服务器地址 databas ...
- meta标签常见浏览器设置
一.如何让双核浏览器默认选择 WebKit 内核渲染自己开发的网页 我们可以使用标签来指定适合自己网站的渲染内核名称,当双核浏览器访问本网页时,就会根据我们的指示,选择我们指定的渲染内核来处理网页.若 ...
- MGB的生成代码解析
目录 @ 问题描述 文字描述 问题是在我刚刚学习MyBatis逆向工程时出现的,我发现使用Example是可以创建两个Criteria对象,并且两个对象也都可以添加条件,但是在运行过程中只会执行第一次 ...
- K2 BPM_北汽新能源业务流程管理信息系统建设思考_全球领先的工作流引擎
本文由CIO发展中心根据北汽新能源流程与IT总监刘伟霞在“亦庄CIO数字化转型探索——CIO发展中心亦庄分舵2019夏季论坛”活动中演讲整理. 在“亦庄CIO数字化转型探索——CIO发展中心亦庄分舵2 ...
- Python之定义默认参数
定义函数的时候,还可以有默认参数. 例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数: >>> int('123') 123 > ...
- linux服务器忘记密码操作
当重启镜像时候 看到这个界面的时候 按1 按1之后进入如下界面 红色区域有解释 按e是编译模式,我们按e OK 这里我们选择第二行按b 进入开发者模式,然后等待启动 然后更改密码
- 【Zookeeper】集群环境搭建
一.概述 1.1 Zookeeper的角色 1.2 Zookeeper的读写机制 1.3 Zookeeper的保证 1.4 Zookeeper节点数据操作流程 二.Zookeeper 集群环境搭建 2 ...
- 通过docker搭建ELK集群
单机ELK,另外两台服务器分别有一个elasticsearch节点,这样形成一个3节点的ES集群. 可以先尝试单独搭建es集群或单机ELK https://www.cnblogs.com/lz0925 ...