Day3-字符串-数组-正则表达式
字符串截取
1、${变量名:N:M}
N 起始值——从0开始——0为第1个字母
M 结束值
[root@localhost ~]# echo $name
thisistest
[root@localhost ~]# echo ${name:0:4}
this
[root@localhost ~]# echo ${name:6:10}
test
2、expr ——可以做比较、运算、字符串
Expr substr "$变量名" N M
注:该起始值从1 开始,不是0
测试字符串长度
Expr length "$变量名"
[root@localhost ~]# echo $name
thisistest
[root@localhost ~]# expr substr "$name" 1 4
this
[root@localhost ~]# expr substr "$name" 5 2
is
3、cut
格式:命令 | cut -b N-M
注:该起始值从1 开始,不是0
[root@localhost ~]# echo $name
thisistest
[root@localhost ~]# echo $name |cut -b 1-4
this
[root@localhost ~]# echo $name |cut -b 7-
test
[root@localhost ~]# echo $name |cut -b 5-6
is
简单使用awk——-F为列——:为冒号分格——$1为第1列
[root@localhost ~]# head -4 /etc/passwd|awk -F ":" '{print $1}'
root
bin
daemon
adm
[root@localhost ~]# ifconfig |head -2|tail -1|awk '{print $2}'|awk -F ":" '{print $2}'
192.168.100.100
[root@localhost ~]# df -h|head -2|tail -1|awk -F " " '{print $4}'
14G
${变量名 符号 表达式}
返回结果:删除与表达式匹配的数据后,剩下的数据是返回值
表达式的表示方式——普通字符——通配符 *
符号
从左向右匹配删除
# 最短匹配删除
## 最长匹配删除
[root@localhost ~]# echo ${MAIL#*/}
var/spool/mail/root
[root@localhost ~]# echo ${MAIL##*/}
root
从右向左匹配删除
% 最短匹配删除
%% 最长匹配删除
[root@localhost ~]# echo ${MAIL%/*}
/var/spool/mail
[root@localhost ~]# echo ${MAIL%%/*}
[root@localhost ~]# echo ${MAIL%%root}
/var/spool/mail/
————————————————————————————————————————————————————————
例——对当前目录下的文件修改
1 #!/bin/bash 2 3 i=1 4 5 for file in `ls *.txt` 6 7 do 8 9 # echo $file 10 11 # a=`echo ${file%.txt}` 12 13 # b=`echo "$a-$i".txt` 14 15 # mv $file $b 16 17 mv $file `echo ${file%.txt}-$i.txt` 18 19 let i++ 20 21 done 22 23 echo "this is mv file ok..."
例——对httpd根目录下的新产生的*.html备份
1 #!/bin/bash 2 a=/bk 3 cd /bk &> /dev/null || mkdir /bk &> /dev/null 4 cd /var/www/html 5 for file in `ls *.html` 6 do 7 if [ ! -e $a/$file ];then 8 cp $file $a 9 fi 10 done 11 echo "This is Bk Ok"
${变量名 符号 "值"}
echo ${变量名 符号 "自定义字串"}——输出命令返回值
变量A=${变量名B 符号 "值"}——把命令的返回值赋值给变量
符号
:+ 作检查变量是否定义——若变量没有定义,返回为空值。反之则返回自定义字串
——变量B有值时,被“值”所取代——若没有定义变量B,则返回为空
检测变量是否为空——[ -z $a ] && echo "null"
:- 给变量赋初值——变量没定义时,返回自定义字串,反之返回变量的值
:= 作用给变量赋初值——若变量没定义时,返回自定义字串,同时把自定义字串赋值给没值的变量
:? 作用捕获因变量没定义所导致的错误——在脚本里使用时,返回错误信息并终止脚本的执行,若自定义字串没定义,返回系统默认设置信息。若变量有值则返回变量的值
shell数组
数组——存放一组数据,一个变量存储多个值,并且每个值都可以独立使用
数组类型——1维数组 2维数组 多维数组
[root@localhost shell]# declare --help
-bash: declare: --: invalid option
declare: usage: declare [-aAfFilrtux] [-p] [name[=value] ...]
定义 [root@localhost shell]# declare -a shuzu
赋值 [root@localhost shell]# shuzu=(a b c d)
使用数组元素 ${数组名[下标]}
查看
[root@localhost shell]# declare |grep shuzu
shuzu=([0]="a" [1]="b" [2]="c" [3]="d")
[root@localhost shell]# echo ${shuzu[2]}
c
输出数组所有元素
[root@localhost shell]# echo ${shuzu[@]}
a b c d
[root@localhost shell]# echo ${shuzu[*]}
a b c d
#echo ${shuzu[@]:N}——N从数组的那一个下标开始显示元素值 默认下标值为0
下标为2开始显示
[root@localhost shell]# echo ${shuzu[@]:2}
c d
下标为1到2
[root@localhost shell]# echo ${shuzu[@]:1:2}
b c
获取数组元素个数 ${#数组名[@]}
获取某个数组元素值的长度 ${#数组名[数组下标]}
输出某个数组元素值的部分数据
echo ${sergrp[下标]:N:M}
N——元素值的编号 第一个字符编号是0
M——显示字符的个数
向已有数组里添加新元素
数组名[下标]=值
下标没有被已有元素使用,就是向数组添加新元素
若下标已经被已有元素使用,说法是修改已有下标元素的值
删除数组元素下标的值——数组名[下标]=
删除数组元素下标——unset 数组名[下标]
删除数组元素所有数据——数组名=()
删除定义的数组名——unset 数组名
例——用户输入多个ip保存到变量ipgroup里,并根据输入ip地址的个数,输出用户所输入的所有ip地址
1 #!/bin/bash 2 read -p "this is ? ip: " a 3 a=${a:-1} 4 b=1 5 for ((i=1;i<=$a;i++)) 6 do 7 read -p "$b ip: " ipgroup[$i] 8 let b++ 9 done 10 for ((i=1;i<=`echo ${#ipgroup[@]}`;i++)) 11 do 12 echo ${ipgroup[$i]} 13 done
正则表达式—— Regular Express
使用 符号 描述 数据的特征
符号——1个或多个——元字符
命令格式
grep [选项] ‘正则表达式’
命令 | grep [选项] ‘正则表达式’
grep ‘root’ /etc/passwd /etc/shadow
ps aux | grep httpd
处理数据的方式
以行为处理单位,一次处理一行,逐行处理
默认输出与正则表达式匹配的行
选项
--color 匹配条件加上颜色显示
-n 匹配行号
-c 匹配行数
-q 去掉匹配输出
-v 取反
-i 忽略字母大小写——默认是有大小写
元字符
匹配开头 ^ 行首
匹配结尾 $ 行尾
任意单个字符 . 不包括换行符 \n——如何需要找 . 字符需要转义 \.
普通符号要转义
^$为空 行
* 匹配前边正则表达式出现的次数——0次到多次
\(正则表达式\) 把正则表达式作为整体匹配
grep --color ‘g\(oo\)*d’ a.txt goo——d
\| 或者
[] 范围内匹配——匹配范围内的任意一个
[a-z] 匹配所有小写字母
[A-Z] 匹配所有大写字母
[a-zA-Z] [a-Z] 匹配所有大小写字母
[0-9] 匹配所有数字
[a-zA-Z0-9] 匹配所有数字和大小写字母
[^0-9a-Z] 范围取反
^[ ]以范围内开头
^[^ ]范围内取反的开头
\{ \}现在前边的表达式出现的次数
\{N\}前边的正则表达式必须出现N次
\{g\(oo\){2}d\} 以g开头oo出现两次的d——g oo oo d
\{N,\}前边的正则表达式至少出现N次
\{N,M\}前边的正则表达式至少出现N次,最好多出现M次——次数>=N并且<=M
\? 匹配前边的正则表达式出现0次到1次
\+ 匹配前边的正则表达式出现1次到多次
\< 匹配单词开头
\> 匹配单词结尾
正确的MAC地址显示出来
六列,每列由任意2个十六进制数组成
[root@localhost shell]# ifconfig eth0|grep --color -E '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}'
使用expect
转载于:https://www.cnblogs.com/fina/p/5816201.html
Day3-字符串-数组-正则表达式相关推荐
- python如何正则匹配浮点值_Python正则表达式字符串数组到浮点数组
我是python正则表达式的初学者.我达到了我所需要的,但是由于缺少经验,这真的很丑.我的目标是转换以下形式的字符串数组: notes = ["10.0% higher", &qu ...
- Go语言字符串和正则表达式
字符串相关方法 获取字符串长度 注意: Go语言编码方式是UTF-8,在UTF-8中一个汉字占3个字节 package main import "fmt" func main() ...
- split 将字符串分割成字符串数组
list_name = list_name.split(","); split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separa ...
- java 中文 音序,java 中文字符串数组按照音序排列
java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...
- python对字符串数组进行排序、依据字符数_Python进行数据的排序以及字符串的操作...
数据异常值的过滤 在数据分析中,经常需要检测数据结构中的异常值.我们还是举个例子,先来创建一个包含三列的DataFrame对象,每一列都包含1000个随机数. 可以用describe( )函数查看每一 ...
- split(v1,v2)用于把一个字符串分割成字符串数组
split(v1,v2) 参数: v1 必填,此为字符串或正则表达式,从该参数指定的地方开始分割 v2 可选.该参数可指定返回的数组的最大长度.如果设置了该参数,返回的子串不会多于这个参数指定 ...
- 将字符串转化为字符串数组
定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separator,howmany) 参数 描述 separator 必需.字符串或正则 ...
- java基础知识 API文档 字符串基本操作 正则表达式 Object
目录 JDK API 什么是JDK API JDk包结构 文档注释规范 文档注释 String及其常用API String是不可变对象 String常量池 内存编码及长度 String常用方法 Str ...
- java正则表达式所有字符串_java正则表达式如何获取字符串中所有匹配内容
java正则表达式如何获取字符串中所有匹配内容以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java正则表达式如何获取 ...
- linux+多个字符分割字符串数组中,String的split()方法可以将字符串按照特定的分隔符拆分成字符串数组...
在java.lang包中有String.split()方法,返回是一个数组------不管按照什么拆,拆出来是一个数组 String str = "1,2,3,4,5,6"; St ...
最新文章
- android Intent PendingIntent的区别
- php邮箱群发,php异步群发邮件
- Openpose——windows编译(炒鸡简单)
- Android数据库Realm实践
- the next generation block styled editor -- eidtor.js
- 欧洲互联网将“死于”版权法?
- FusionChart 保存图片
- mybatis update返回值的意义
- HIT CSAPP 大作业
- 计算机中年级排名怎么操作,智学网年级排名查看方法规则介绍
- vue-awsome-swiper稳定版本3.1.3及使用方法,API见swiper官网https://www.swiper.com.cn/api/index.html
- 为什么要用promise处理ajax,为什么要使用promise
- 米老师经典语录————再造生命力
- mysql 对视图的操作_Mysql中关于视图操作的详解
- Java免费获取实时汇率API
- 杂七杂八,乱七八糟的大杂烩!
- EasyUi(完整版)
- Google Colab 读取/存储 google drive(谷歌云盘)内的文件
- 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(二)
- 微信小程序毕业设计 基于微信药店药品商城小程序开题报告