字串处理

子串截取
方法一:使用${}表达式
格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略)

方法二:使用expr substr
格式:expr substr "$x" 起始位置 长度(起始位置编号从1开始)

方法三:使用cut工具
格式:ceho $x|cut -b 起始位置-结束位置(起始位置编号从1开始)
-b:字节过滤
-c:过滤字符
-f:过滤列

示例:截取QQ1520029989
[root@ceshiji ~]# x=1520029989
[root@ceshiji ~]# echo $x
1520029989

方法一:[root@ceshiji ~]# echo ${x:0:5}
QQ152

方法二:[root@ceshiji ~]# expr substr "$x" 1 7
QQ15200

方法三:[root@ceshiji ~]# echo $x|cut -b 1-8
QQ152002

路劲分割:
取目录位置
格式:dirname "字符串"(截取文件名)
[root@ceshiji ~]# dirname /a/c/b/c.txt
/a/c/b

取文档的基本名称
格式:basename "字符串"(截取路劲)
[root@ceshiji ~]# basename /a/c/b/c.txt
c.txt

字串替换的方法:
只替换第一个匹配结果
格式:echo ${/var/old/new}
[root@ceshiji ~]# a=123456
[root@ceshiji ~]# echo ${a/3/x}
12x456

替换全部匹配结果
格式:echo ${var//old/new}
[root@ceshiji ~]# a=12345353
[root@ceshiji ~]# echo ${a//3/x}
12x45x5x
[root@ceshiji ~]# echo ${a//53/xz}
1234xzxz

——————————————————————————————————————————

字符串的掐头去尾

字符串掐头(#用来删除头部,*通配)
从左向右,最短匹配删除
格式:echo ${变量名#*关键词}
[root@ceshiji ~]# x=`head -1 /etc/passwd`(x变量=head -1 /etc/passwd命令,)
[root@ceshiji ~]# echo ${x#*:}
x:0:0:root:/root:/bin/bash

从右向左,最长匹配删除
格式:echo ${变量名##*关键词}
[root@ceshiji ~]# echo ${x##*:}
/bin/bash

字符串去尾(%用来删除头部,*通配)
从左向右,最短匹配删除
格式:echo ${变量名%关键词*}

从右向左,最长匹配删除
格式:echo ${变量名%%关键词*}

批量改扩展文件名
[root@ceshiji ~]# vim a.sh
#!/bin/bash
for i in `ls *.$1`
do
mv $i ${i%.*}.$2
done

变量赋初始值
若变量xx已经存在且非null,则返回$xx的值
否则返回字符hydra,变量xx值不变
取值:${xx:-hydra}
[root@ceshiji ~]# echo ${b:-ok}
ok
[root@ceshiji ~]# b=1520029989
[root@ceshiji ~]# echo ${b:-ok}
1520029989

[root@ceshiji ~]# vim a.sh
#!/bin/bash
read -p "admin:" user
read -p "pass:" pass
user=${user:-tom}
pass=${pass:-123}
useradd $user
echo "pass" |passwd --stdin $user

———————————————————————————————————

expect简介
基于TCL编写的自动交互式程序
可以用在shell脚本中,为交互式过程自动传输预先准备的文本或指令
无需人工干预,触发的依据是预期会出现的特征提示文本
但是expect不支持变量,但可以将expect内置到shell脚本中

实例:
将expect内置到shell脚本中实现ssh自动登陆,并远程执行指令
spawn:启动程序
expect:屏幕出现什么识别什么
send自动执行
[root@ceshiji ~]# vim expect.sh
#!/bin/bash
for i in 1..253
do
expect <<EOF
spawn ssh 192.168.4.$i
expect{
"yes/no" {send "yes\r";exp_continue}
"password" {send "Taren1"}
# {send "mkdir /hydra\r"}
# {send "exit\r"}
}
EOF
done

————————————————————————————————————————

正则表达式
数组:变量 [存多个值]
a=(11 22 33 xx yy)
echo ${a=[0]}(调用变量)

grep过滤命令
基本用法:
格式一:grep [选项] '正则表达式' 文件
格式二:前置命令 |grep [选项] '正则表达式'
常用命令选项:
-i:忽略字母大小写
-v:条件取反
-c:统计匹配次数
-q:静默,无任何输出(看$?返回值,为0则匹配)
-n:显示出匹配结果所在的行号
--color:标红显示匹配字串

基本正则
行首及单字匹配
类型 含义 示例 说明
^ 匹配行首 ^abc 匹配以abc开始的行
$ 匹配行尾 abc$ 匹配以abc结尾的行
. 单个字符 . 匹配任意字符,(\n换行符除外)
+ 最多匹配一次 a+或者(abc)+ 一个或多个连续的a
* 匹配任意次数 .* 任意长度的任意字符
{} 限定匹配次数 \{n},{\n,m\},{n,} 匹配n次,匹配n-m次,至少匹配n次
[] 集合内的任何字符 [a-z] 匹配任意小写字母
[^..] 中阔号内加^ [^123] 过滤123
\(xx\) 保留 \(abc\)x\2 保留abc

实例:
在a.txt文件中
匹配a出现的次数
[root@ceshiji ~]# grep "a*" a.txt
aaaa
bbasads
caascaiof
assacafca
asocnoaf

过滤有oo的字节
[root@ceshiji ~]# grep "oo" a.txt

过滤不想要oo前面有g的
[root@ceshiji ~]# grep "[^g]oo" a.txt

过滤oo前面不想有小写字母
[root@ceshiji ~]# grep "[^a-z]oo" a.txt

过滤有数字的一行
[root@ceshiji ~]# grep "[^0-9]" a.txt

过滤两个o以上的字节
[root@ceshiji ~]# grep "o\{2,\}" a.txt

扩展正则(增强,优化)
egrep
类型 含义 示例 说明
() 组合为整体 ab{1,3} 匹配ab
? 最多匹配一次 a?或者(abc)? 0个或a,0个或1个abc
+ 最少匹配一次 a+或者(abc)+ 一个或多个连续的a,一个或多个连续的abc
——————————————————————————————————————————————————————

shell脚本 字串截取 正则表达式的更多相关文章

  1. Linux shell 脚本攻略之正则表达式入门

    摘自:<Linux shell 脚本攻略> 下面是类似的解释:

  2. Linux shell脚本的字符串截取

    http://blog.csdn.net/gumanren/article/details/5601544 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.ha ...

  3. Linux Shell脚本编程--字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...

  4. SQL字串截取函数编写及应用

    SQL里面一种用来截取字符串的方法,用的是表函数实现字符串截取并应用的SQL操作语句中. .截取字符串表函数 ALTER FUNCTION [dbo].[SplitToTable] ( -- Add ...

  5. Shell脚本编程中截取字符串方法

    例如: 假设变量var=http://www.baidu.com/111.png 1.#号截取(删左留右) echo ${var#*//} # 号是运算符,*// 表示从左边开始删除第一个 // 号及 ...

  6. 100个Linux Shell脚本经典案例(附PDF)

    转载自:https://mp.weixin.qq.com/s/tCKAM67_7K7q2vJthaIsDQ 原文链接:https://wenku.baidu.com/view/4f089430a116 ...

  7. Shell脚本并发及并发数的控制

    https://www.jianshu.com/p/701952ffb755 正常情况下,Shell脚本是串行执行的,一条命令执行完才会执行接下来的命令.如下代码: # !/bin/bash for ...

  8. 案例四:Shell脚本生成随机密码

    生成随机密码(urandom版本) #!/bin/bash #Author:丁丁历险(Jacob) #/dev/urandom文件是Linux内置的随机设备文件 #cat /dev/urandom可以 ...

  9. 100个Shell脚本——【脚本2】截取字符串

    [脚本2]截取字符串 一.脚本 现有一个字符串如下: http://www.aaa.com/root/123.htm 请根据以下要求截取出字符串中的字符: 1.取出www.aaa.com/root/1 ...

随机推荐

  1. PHP读取XML文件

    xml主键被json取代,大概了解一下就OK了 简要: 加载xml文件:$xml = simplexml_load_file('sa.xml');//$xml是一个对象 读取节点:echo $xml- ...

  2. R 调用 python

    上一篇说了python使用 rpy2 调用 R,这里介绍R如何调用python.R的强项在于统计方面,尤其是专业的统计分析,统计检验以及作图功能十分强大,但是在通用性方面,就远不如Python了,比如 ...

  3. 第一章 C++基本认识

    1.使用visual studio时让程序暂停,在return前加上这个: char response; std::cin >> response; 2.c++程序开发流程 3.变量名的命 ...

  4. PostgreSQL版本快速升级

    PostgreSQL版本快速升级 写在前面 PostgreSQL9.5版本支持数据分片的功能,为以后做分布式考虑,准备将生产环境的9.1版本升级至9.5.中间需要做数据迁移. 在迁移操作中,为保证数据 ...

  5. PHP使用file_get_contents或curl请求https的域名内容为空或Http 505错误的问题排查方法

    前段日子,突然接到用户的反馈,说系统中原来的QQ登录.微博登录通通都不能用,跟踪代码进去后发现,是在 file_get_contents这个函数请求QQ登录的地方报错,在用该函数file_get_co ...

  6. 关于dom4j解析xml

    一:相关jar包 dom4j-1.6.1.jar 二:用例xml文件 三:解析 注:可能有的小白不知道如果获取节点,so,you can: for (Iterator<Element> i ...

  7. Bootstrap+Vue.js 练习入门一

    一. 效果如下图所示,输入用户名和年龄,点击添加,数据会自动添加到下面的用户信息表内.当没有数据时,用户信息表显示:暂无数据……,当有数据时,显示 删除全部 按钮,这里为了方便快捷,我没有做删除按钮的 ...

  8. 《CSS核心技术详解》

    前言 看似简单的CSS,却暗藏玄机,那是我们摸爬滚打好长时间后悟出的真理. 在很长的一段时间里,我并没有重视CSS,觉得CSS很简单,无非就是一些属性:后来才发现自己小看了CSS,对CSS的了解实在是 ...

  9. 二维码开源库ZBar-实现中文解码

    中文乱码 上篇<ZBar-windows下编译和使用>已经成功解析了条形码,但目标是二维码,经测试二维码中文会出现乱码.下图二维码的内容是"http123测试456", ...

  10. Linux中的 awk查找日志中的相关记录

    假设要在 api.log.201707201830 文件中,(此文件的多个字段数据以不可见字符^A(键盘上按下Ctrl+V+A)分隔),要输出第70个字段: awk -F '^A' '{print $ ...