一、截取子字符串

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字符串处理相关推荐

  1. ​shell-7.shell 字符串的使用

    shell-7.shell 字符串的使用 1.查看字符串的长度 ${#var} 可计算出变量值的长度: [root@10-222 ~]# var='yuanji' [root@10-222 ~]# e ...

  2. shell字符串截取

    shell 字符串截取方法 1.从第几个索引开始,截取到最后 2.从第几个索引开始,截取指定长度字符 3.从倒数第几个位置开始,截取到最后 4.从倒数第几个位置开始,截取指定长度字符 5.从左开始匹配 ...

  3. shell编程:实现shell字符串连接功能

    功能:实现shell字符串连接功能 a=0 s1=test. s2=.wav s3=.mp3 s4=0 s5=00str="sox ./${s1}${a}${s2} ./${a}${s3}& ...

  4. shell 字符串操作(长度,查找,替换)详解

    #################################################### 工作中字符串操作举例 #################################### ...

  5. shell字符串的处理

    shell字符串的处理 截取: shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr "$a" 1 8 2.e ...

  6. linux shell 字符串操作(长度,查找,替换)详解 BASH

    linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...

  7. shell字符串处理

    转自:http://mcuos.com/thread-2357-1-1.html 一.构造字符串 直接构造 STR_ZERO=hello STR_FIRST="i am a string&q ...

  8. linux shell字符串及字符串长度获取方式

    linux shell字符串及字符串长度获取方式

  9. shell字符串的用法

    shell字符串的用法 注意:shell4.2和shell4.1会有差别,较低版本的shell可能不支持某些功能 获取字符串长度:${#string} 获取子串: 注:(左边的第一个字符是用 0 表示 ...

最新文章

  1. 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
  2. python基础 ---- 使用pyCharm 调试
  3. python用另一个字段替代本字段的null_Python中的数据库
  4. linux技巧----查找某个正在执行的脚本
  5. Java算法之最大子序和
  6. 免费会员管理系统实现门店微信会员营销
  7. 学习方法——哈佛大学幸福课(积极心理学)学习笔记(上)
  8. 手动生成linux中Qt的moc文件,手动生成Qt的moc文件的方法
  9. cocos2d-x游戏开发屏幕横竖屏切换
  10. OpenXR+Runtime:OpenXR SDK与Runtime的衔接
  11. 纳尼?Collections对时间戳排序出错了??
  12. linux的文件服务器
  13. 【Vue】Vue 判断插槽内容是否加载完成
  14. 基于安卓手机使用Termux搭建web服务器教程
  15. 成长-技术人员的成长
  16. 华为IOT设备消息上报和消息下发验证
  17. Word论文中关于章、节、图、表、公式自动编号及引用
  18. 树和森林的遍历 (树的建立和输出)
  19. 在线图片处理工具锦集,满满干货
  20. ios迅雷beta_我的iOS 14 Beta月

热门文章

  1. HNOI2016 游记
  2. (附源码)springboot小说网站系统 毕业设计 041446
  3. Stata实验——关于我国GDP增长率和CONS增长率
  4. 大学毕业生必听十条人生忠告
  5. 4.Anaconda查找包,下载包,更新包,删除包
  6. 谷歌收购摩托罗拉移动---前途将何去何从
  7. OpenMesh 报错“Use dereferencing operators - and * instead.”的解决
  8. Lua 打印table、ngx.say table
  9. Codeup——597 | 问题 A: Set Similarity (25)
  10. Python matplotlib库绘图时设置标题 (label)、坐标轴 (axis) 和标注 (legend)的字体及大小