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/urandom
        UUID生成命令: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:所有的身份验证令牌已经成功更新。
发布了23 篇原创文章 · 获赞 1 · 访问量 1451
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览