字符串截取

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-字符串-数组-正则表达式相关推荐

  1. python如何正则匹配浮点值_Python正则表达式字符串数组到浮点数组

    我是python正则表达式的初学者.我达到了我所需要的,但是由于缺少经验,这真的很丑.我的目标是转换以下形式的字符串数组: notes = ["10.0% higher", &qu ...

  2. Go语言字符串和正则表达式

    字符串相关方法 获取字符串长度 注意: Go语言编码方式是UTF-8,在UTF-8中一个汉字占3个字节 package main import "fmt" func main() ...

  3. split 将字符串分割成字符串数组

    list_name = list_name.split(","); split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separa ...

  4. java 中文 音序,java 中文字符串数组按照音序排列

    java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...

  5. python对字符串数组进行排序、依据字符数_Python进行数据的排序以及字符串的操作...

    数据异常值的过滤 在数据分析中,经常需要检测数据结构中的异常值.我们还是举个例子,先来创建一个包含三列的DataFrame对象,每一列都包含1000个随机数. 可以用describe( )函数查看每一 ...

  6. split(v1,v2)用于把一个字符串分割成字符串数组

    split(v1,v2) 参数: v1   必填,此为字符串或正则表达式,从该参数指定的地方开始分割 v2   可选.该参数可指定返回的数组的最大长度.如果设置了该参数,返回的子串不会多于这个参数指定 ...

  7. 将字符串转化为字符串数组

    定义和用法 split() 方法用于把一个字符串分割成字符串数组. 语法 stringObject.split(separator,howmany) 参数 描述 separator 必需.字符串或正则 ...

  8. java基础知识 API文档 字符串基本操作 正则表达式 Object

    目录 JDK API 什么是JDK API JDk包结构 文档注释规范 文档注释 String及其常用API String是不可变对象 String常量池 内存编码及长度 String常用方法 Str ...

  9. java正则表达式所有字符串_java正则表达式如何获取字符串中所有匹配内容

    java正则表达式如何获取字符串中所有匹配内容以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java正则表达式如何获取 ...

  10. linux+多个字符分割字符串数组中,String的split()方法可以将字符串按照特定的分隔符拆分成字符串数组...

    在java.lang包中有String.split()方法,返回是一个数组------不管按照什么拆,拆出来是一个数组 String str = "1,2,3,4,5,6"; St ...

最新文章

  1. android Intent PendingIntent的区别
  2. php邮箱群发,php异步群发邮件
  3. Openpose——windows编译(炒鸡简单)
  4. Android数据库Realm实践
  5. the next generation block styled editor -- eidtor.js
  6. 欧洲互联网将“死于”版权法?
  7. FusionChart 保存图片
  8. mybatis update返回值的意义
  9. HIT CSAPP 大作业
  10. 计算机中年级排名怎么操作,智学网年级排名查看方法规则介绍
  11. vue-awsome-swiper稳定版本3.1.3及使用方法,API见swiper官网https://www.swiper.com.cn/api/index.html
  12. 为什么要用promise处理ajax,为什么要使用promise
  13. 米老师经典语录————再造生命力
  14. mysql 对视图的操作_Mysql中关于视图操作的详解
  15. Java免费获取实时汇率API
  16. 杂七杂八,乱七八糟的大杂烩!
  17. EasyUi(完整版)
  18. Google Colab 读取/存储 google drive(谷歌云盘)内的文件
  19. 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(二)
  20. 微信小程序毕业设计 基于微信药店药品商城小程序开题报告

热门文章

  1. 我为什么要理解storm的一些概念
  2. 我们聊聊快排吧...
  3. C# 类(11) 密封类.
  4. iphone开发工程师面试真题(又像c的)
  5. 用 SQL 脚本读取Excel 中的sheet数量及名称
  6. SpringBoot使用AutoConfiguration自定义Starter
  7. CKEditor4x word导入不保存格式的解决方案
  8. ES6的这些新知识你记住了没?
  9. 数据结构与算法之递归和分治思想
  10. 前端基础--jquery