一.字符串的处理
 
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 04 字符串处理、正则表达式的更多相关文章

  1. shell截取字符串的方法

    参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...

  2. shell基础——字符串处理(转载)

    Shell的字符串处理   1 得到长度   %x="abcd"  #方法一      %expr length $x      4  # 方法二      %echo ${#x} ...

  3. 零基础学Python--------第5章 字符串及正则表达式

    第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的 ...

  4. Shell学习之结合正则表达式与通配符的使用(五)

    Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...

  5. R5—字符串处理/正则表达式

    R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...

  6. C#高级编程9-第9章 字符串和正则表达式

    字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...

  7. shell中字符串操作【转】

    转自:http://blog.chinaunix.net/uid-29091195-id-3974751.html 我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,当然shell编程也不例 ...

  8. shell之文本过滤(正则表达式)

    shell之文本过滤(正则表达式) 分类: linux shell脚本学习2012-09-14 12:59 213人阅读 评论(0) 收藏 举报 当从一个文件或命令输出中抽取或过滤文本时,可以使用正则 ...

  9. shell截取字符串的8种方法

    参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...

随机推荐

  1. docker 实践二:操作镜像

    本篇我们来详细介绍 docker 镜像的操作. 注:环境为 CentOS7,docker 19.03 之前已经说过,容器是 docker 的核心概念之一,所以对应的就需要知道它的使用方法,接下来我们就 ...

  2. 关于OI中的各种数学

    学到后面数学越来越多了,感觉好难啊,开个博客专门记录一下数学相关的东西 因为反正也没人看,所以主要还是给自己看的 一些符号: 数论函数的卷积:$\ast$,$ h = f \ast g$ 则 $h(n ...

  3. (一)Struts2 基础

    一.Struts简介 1.1 历史 虽然Struts 2号称是一个全新的框架,但这仅仅是相对Struts 1而言.Struts 2与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框 ...

  4. SpringMVC 出现 406(Not Acceptable)

    首先,需要清楚,http state 406代表什么意思: 406是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页.一般指客户端浏览器不接受所请求页面的MIME类型. 出现这样的错误 ...

  5. Java AmericanFlagSort

    Java AmericanFlagSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInterna ...

  6. 使用swagger在netcorewebapi项目中自动生成文档

    一.背景 随着前后端分离模式大行其道,我们需要将后端接口撰写成文档提供给前端,前端可以查看我们的接口,并测试,提高我们的开发效率,减少无效的沟通.在此情况下,通过代码自动生成文档,这种需求应运而生,s ...

  7. .NET Core使用swagger遇到的坑

    今天突然点开写好的接口,突然发现展开时同时展开了两个接口.如图 我点这两个接口任意一个,这两个都会同时展开或折叠. 原因是他们actinName相同,虽然在vs里面只要http方法不同,action是 ...

  8. myeclipse 出现换行符和空格符 解决方案 换行出现乱码

    请参看百度经验 https://jingyan.baidu.com/article/acf728fd2639e4f8e510a399.html myeclipse 2014 自定义视图Customiz ...

  9. Django rest-framework框架-组件之视图

    视图: a. django class Test(View): ... b. rest_framework class Test(APIView): ... c. GenericAPIView 一般不 ...

  10. ASE19团队项目beta阶段Backend组 scrum2 记录

    本次会议于12月5日,19:00在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Zhikai Chen, Lihao Ran, Xin Kang 请假人员:Hao Wang 每个 ...