05.Shell字符串处理
一、截取子字符串
1.使用expr命令
基本用法:expr substr $var1 起始位置 截取长度
$ var1="Ubuntu18.04"
$ expr substr $var1 1 6
Ubuntu
$ expr substr $var1 7 5
18.04
2.使用cut命令
基本用法命令输出 | cut -c 起始位置-结束位置命令输出 | cut -d '分隔符' -f 字段编号
$ var1="Ubuntu18.04"
$ echo $var1 | cut -c 7-8
18
$ echo $var1 | cut -c -6 //简略用法,缺省从1开始
Ubuntu
$ echo $var1 | cut -d 't' -f 2
u18.04
3.使用${}表达式
基本用法(注:第一个起始位置的编号为0)${var1:起始位置:截取长度}${var1::截取长度}
$ var1="CentOS6.5"
$ echo ${var1:1:4}
entO
$ echo ${var1::4}
Cent
$ echo ${var1:6:3}
6.5
二、字符串替换
1.使用${}表达式
基本用法${var1/old/new} //替换第一个匹配结果old${var1//old/new} //替换所有的匹配结果old
$ var="CentOS6.5 Server"
$ echo ${var1/CentOS/RHEL}
RHEL6.5 Server
$ echo ${var1/e/##}
C##ntOS6.5 Server //只有第一个e被替换
$ echo ${var1//e/##}
C##ntOS6.5 S##rv##r //所有的e都被替换
例:批量替换应用
根据模板字串创建新的/etc/passwd记录参照root的记录作为模板新用户的登录名称由变量UN提供
$ var1="root:x:0:0:root:/root:/bin/bash"
$ UN="lisi";echo ${var1//root/$UN}
lisi:x:0:0:lisi:/lisi:/bin/bash
$ UN="wangwu";echo ${var1//root/$UN}
wangwu:x:0:0:wangwu:/wangwu:/bin/bash
2.tr单字替换工具
基本用法(可以不连续地替换)命令输出 | tr 'abc' 'ABC'命令输出 | tr -d 'abc'
$ head -l /etc/passwd | tr 'or' 'OR' //将字符o、r都改成大写
ROOt:x:0:0:ROOt:/ROOt:/bin/bash
$ head -l /etc/passwd | tr -d ':' //删除所有的:字符
rootx00root/root/bin/bash
三、路径分割
1.概念
文件路径/etc/passwd的含义文件所在的位置:/etc 文件名称:passwd目录路径/boot/grub的含义目录所在的位置:/boot目录名称:grub
文件/目录所在的位置称为目录名称,文件/目录本身称为基本名称
2.dirname 取目录名称
基本用法:dirname "字符串"
$ dirname "/etc/passwd"
/etc
$ var1="/boot/grub/"
$ dirname $var1
/boot
3.basename 取基本名称
基本用法:basename "字符串"
$ basename "/etc/passwd"
passwd
$ var="/boot/grub/"
$ basename $var1
grub
$ basename $(ls /etc/vsftpd/vsftpd.conf)
vsftpd.conf
$ dirname $(ls /etc/vsftpd/vsftpd.conf)
/etc/vsftpd
四、使用随机字符串
1.随机设备或工具
常见的随机性工具随机数变量:RANDOM特殊设备文件:/dev/urandomUUID生成命令:uuidgen
$ uuidgen
d20dff5d-2859-42ea-8de4-ef578a6bbaea
$ head -1 /dev/urandom
/lasHdg$jsaUlg([agsGagj!lsag.salgM])
2.随机信息的转换
md5sum校验工具(将随机数、乱码转换成MD5编码的字符串)根据输入文本计算出256位(32字符)的MD5编码值输入文本有任何差异,编码结果都会不相同
$ md5sum /etc/passwd
123236k3h26h2j313jh5213j21k35h2k /etc/passwd
$ echo $RANDOM | md5sum
671c9f3f9596b7e0b6360ebd0b16fc35 -
$ echo $RANDOM | md5sum
7b1e7e85c23dd70156326ls0enra0169 -
$ head -1 /dev/urandom | md5sum
c5281670d8bl6c2b8o9263f820bkk23d -
$ head -1 /dev/urandom | md5sum
02326da20692dg2360sagjlsjgsa2lg9 -
3、截取随机字符串
1)使用cut命令直接利用随机信息的md5sum转换结果任意截取32位以内的连续字符串
$ echo $RANDOM | md5sum | cut -c -8 //取8位随机串
1bads8d4
$ echo $RANDOM | md5sum | cut -c -16 //取16位随机串
603235fds2368slg
2)处理uuidgen随机串默认会有 - 连字符可利用tr命令删除 - 连字符再使用cut命令截取所需长度的字符串
$ uuidgen | tr -d '-' //去掉-字符的情形
93266h2e9g00sheh32g6802a1hd4kd02
$ uuidgen | cut -c -8 //取8位随机串
E63o0f23
$ uuidgen | tr -d '-' | cut -c -16 //取16为随机串
523hd082de9g40a1
五、命令替换
提取命令输出使用场景:i.简化运维任务,在命令行嵌入另一个命令的输出结果ii.将命令的输出保存到指定变量
1.使用`反撇号
基本用法:`可执行命令`
例:查看tr所属软件包的名称、版本
$ which tr //找到命令在哪里
/usr/bin/tr
$ rpm -qf /usr/bin/tr //找到命令所属的软件包
coreutils-8.4-31.el6.x86_64
$ rpm -qf `which tr` //两步并作一步
coreutils-8.4-31.el6.x86_64
2.使用$()表达式
基本用法:$(可执行命令)
例:查看tr所属软件包的用途描述
$ rpm -qi $(rpm -qf $(which tr)) //方便嵌套使用
Name :coreutils Relocations:(not relocatable)
Version :8.4 Vendor:Red Hat,Inc.
Release :31.el6 Build Date:2013年10月18日 星期五 20时06分28秒
.. ..
Summary :A set of basic GNU tools commonly used in shell scripts
Description :These are the GNU core utilities. This package is the combination of the
old GNU fileutils, sh-utils, and textutils packages.
应用示例
i.列出/boot/下超过3M的文件的详细属性
$ ls -lh ${find /boot -size +3M}
-rw-------. 1 root root 17M 8月 12 10:13 /boot/initramfs-2.6.32-431.el6.x86_64.img
-rwxr-xr-x. 1 root root 4.0M 11月 2013 /boot/vmlinuz-2.6.32-431.el6.x86_64
ii.记录一个8位的随机密码,并为用户stu01设置此密码
$ PASS=$(uuidgen | cut -c -8) //提取随机串,存入变量
$ echo $PASS //确认取值结果
89d4e2c3
$ echo $PASS | passwd --stdin stu01 //利用变量值设密码
更改用户stu01的密码。
passwd:所有的身份验证令牌已经成功更新。
05.Shell字符串处理相关推荐
- shell-7.shell 字符串的使用
shell-7.shell 字符串的使用 1.查看字符串的长度 ${#var} 可计算出变量值的长度: [root@10-222 ~]# var='yuanji' [root@10-222 ~]# e ...
- shell字符串截取
shell 字符串截取方法 1.从第几个索引开始,截取到最后 2.从第几个索引开始,截取指定长度字符 3.从倒数第几个位置开始,截取到最后 4.从倒数第几个位置开始,截取指定长度字符 5.从左开始匹配 ...
- shell编程:实现shell字符串连接功能
功能:实现shell字符串连接功能 a=0 s1=test. s2=.wav s3=.mp3 s4=0 s5=00str="sox ./${s1}${a}${s2} ./${a}${s3}& ...
- shell 字符串操作(长度,查找,替换)详解
#################################################### 工作中字符串操作举例 #################################### ...
- shell字符串的处理
shell字符串的处理 截取: shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr "$a" 1 8 2.e ...
- linux shell 字符串操作(长度,查找,替换)详解 BASH
linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...
- shell字符串处理
转自:http://mcuos.com/thread-2357-1-1.html 一.构造字符串 直接构造 STR_ZERO=hello STR_FIRST="i am a string&q ...
- linux shell字符串及字符串长度获取方式
linux shell字符串及字符串长度获取方式
- shell字符串的用法
shell字符串的用法 注意:shell4.2和shell4.1会有差别,较低版本的shell可能不支持某些功能 获取字符串长度:${#string} 获取子串: 注:(左边的第一个字符是用 0 表示 ...
最新文章
- 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
- python基础 ---- 使用pyCharm 调试
- python用另一个字段替代本字段的null_Python中的数据库
- linux技巧----查找某个正在执行的脚本
- Java算法之最大子序和
- 免费会员管理系统实现门店微信会员营销
- 学习方法——哈佛大学幸福课(积极心理学)学习笔记(上)
- 手动生成linux中Qt的moc文件,手动生成Qt的moc文件的方法
- cocos2d-x游戏开发屏幕横竖屏切换
- OpenXR+Runtime:OpenXR SDK与Runtime的衔接
- 纳尼?Collections对时间戳排序出错了??
- linux的文件服务器
- 【Vue】Vue 判断插槽内容是否加载完成
- 基于安卓手机使用Termux搭建web服务器教程
- 成长-技术人员的成长
- 华为IOT设备消息上报和消息下发验证
- Word论文中关于章、节、图、表、公式自动编号及引用
- 树和森林的遍历 (树的建立和输出)
- 在线图片处理工具锦集,满满干货
- ios迅雷beta_我的iOS 14 Beta月
热门文章
- HNOI2016 游记
- (附源码)springboot小说网站系统 毕业设计 041446
- Stata实验——关于我国GDP增长率和CONS增长率
- 大学毕业生必听十条人生忠告
- 4.Anaconda查找包,下载包,更新包,删除包
- 谷歌收购摩托罗拉移动---前途将何去何从
- OpenMesh 报错“Use dereferencing operators - and * instead.”的解决
- Lua 打印table、ngx.say table
- Codeup——597 | 问题 A: Set Similarity (25)
- Python matplotlib库绘图时设置标题 (label)、坐标轴 (axis) 和标注 (legend)的字体及大小