问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SHELL脚本之字符串大截取取与切割

发布网友 发布时间:2022-12-10 03:28

我来回答

1个回答

热心网友 时间:2024-06-29 02:13

本问主要解决以下三个问题:

第一问、什么是字符串的截取与切割以及它的作用是什么?

第二问、字符串截取大方法有哪些?

第三问、字符串截取与切割大实际应用场景有哪些?

第一问:什么是字符串的截取与切割以及它的作用是什么?

字符串的截取与切割指的是:将一串数字、文字、字母以及各种标点和特殊的符号按你的需要进行过滤和筛选;

例如:请在李白的这首《行路难》中找出第15个字是什么?如果我们肉眼的话,就得挨个数了;

                            《行路难》

        金樽清酒斗十千⑴,玉盘珍羞直万钱⑵。

  停杯投箸不能食⑶,拔剑四顾心茫然。

  欲渡黄河冰塞川,将登太行雪满山。

  闲来垂钓碧溪上,忽复乘舟梦日边⑷。

  行路难!行路难!多岐路,今安在⑸?

  长风破浪会有时⑹,直挂云帆济沧海

这只是一首短诗,如果要在1万字中寻找一第67898个字,你肿么办?也一个一个的数吗?

这个时候,如果你知道字符串的截取与切割那就非常简单了,几秒钟就搞定了。

如何搞定从10万字中只取第67898个字?

请看,字符串截取大方法有哪些?

第二问、字符串截取大方法有哪些?

字符串截取的方法有三种,分别是:

1、${变量名:起始位置:长度};

2、expr  substr  "$变量名"  起始位置  长度 ;

3、echo   $变量名  |  cut  -b   起始位置-结束位置

用这三种方法都可以实现快速的从10万个字中寻找到第67898个字;

假如这10万字在一个名叫luo.txt的文本文件中;

定义变量:look=$(cat  /luo.txt)

第一种方法:echo   ${look:67897:1}

译为:从变量 look 中截取第67898个字符,字符长度为1个;

注:采取${}这种方法截取字符,起始位置是从0开始算起,所以截取第67898个字符,我填写的是67897;

第二种方法:expr   substr   "$look"    67898  1 

译为:采取 expr substr  字符串截取的方法,截取变量look中的第67898位置的字符,长度为1;

第三种方法:echo   $look  |    cut  -b  67898

译为:运用 echo  $变量名  |  cut  -b  起始位置-结束位置的方法截取变量look中起始位置是67898,结束位置也是67898的字符;

第三问、字符串截取与切割大实际应用场景有哪些?

应用场景有以下但不限于:

场景1:为新建的用户设置随机密码;

场景2:信用卡用户,新卡下来的随机密码;

场景3:在茫茫字符串中寻找你想要的任意字符;

以场景1为例编写用户随机密码的脚本:

假如你是公司的运维工程师,现在你公司有100个新同事刚刚入职,需要你为他们创建新的账户和密码,请问你会怎么做?

具体做法如下:

第一步、问人事部拿到新同事入职名单user.txt;

第二步、编写一个创建用户和设置密码的脚本;

vim   /xin.sh        ##译为:运用vim文本编辑器创建一个名叫xin.sh的文本文件;

 #!/bin/bahs        ##译为:shell脚本固定格式;

pass=""                ##译为:将pass这个变量定义为空值;

x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

##译为:讲x这个变量定义为abcdefghij......

for  i  in `cat  /user.txt`        ##译为:将 i 这个变量 cat  /user.txt,然后循环执行下面的指令;

do

useradd  $i            ##译为:创建变量中 $i 的用户;

echo  "用户 $i 创建成功"    ##译为:运用 echo 输出创建 $i 的信息;

echo $i >> /luo1.txt        ##译为:将 $i 的信息输出并追加重定向到 luo.txt 这个文本文件中;

for  q  in  {1..6}        ##译为:循环中嵌套的子循环,循环执行下面的命令6次;

do

n=$[RANDOM%62]        ##译为:为变量名 n 赋值为1-62之间;

m=${x:n:1}                      ##译为:将变量名 m 赋值为 $(x:n:1);

pass=${pass}$m            ##译为:将变量名 pass 赋值为 ${pass}$m

done                              ##译为:结束循环的固定格式;

echo  $pass  |  password  --stdin  $i  &>  /dev/null    ##译为:将 $i 的用户的密码设置为 $pass,并把结果输在屏幕上的结果,不管是正确还是错误,全部丢掉;

echo  "用户 $i 的密码设置成功"  ##译为:运用 echo 命令输出 $i 创建密码的信息;

echo $pass >> /luo1.txt ##译为:将 $pass 的信息输出并追加重定向到 luo.txt 这个>文本文件中;

pass=""                          ##译为:将变量pass重新定义为空值,便于上面命令重新赋值;

done                             ##译为:for循环固定的结束格式;

以上........

(本篇完)

祝:顺利!

罗贵

2019-0310于深圳
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? AE如何才能自学 2005版第五套人民币50元的光变油墨面额数字颜色变化特征 智能财务的应用场景有哪些 智能财务系统怎么驳回 苹果5手机,怎么弄透明qq主题?不越狱 交通设施工程工司取名 求助,我想要刘忠河版本的打金枝全集,MP3格式的,谢谢 看看微商分销系统多少钱,有何帮助 忍者必须死3是哪国的 忍者必须死三名字卡住咋办 一个忍者武士拿一把刀闯关的游戏大招可以放凤凰叫什么名字 各位大佬,哪有比较好的 ThinkPHP6 源码分析的视频教程推荐? 简述深浅拷贝 浅克隆和深克隆的区别 400元买什么手机好 少儿钢琴培训学校帮忙取名 六级报名官网入口2022下半年时间 php 从入门到精通 为什么只有19天 不是有三十天吗 请问有《php从入门到精通第二版》的源码吗?有的话发给我一份好吗,谢... QQ群机器人手机版是怎么制作出来的?手机能不能做群机器人?希望各位大 ... (shell脚本)特殊分隔符文本文件导入MongoDB 玄幻小说全集下载txt 求武侠小说玄幻小说的下载地址或网页 有什么好看的玄幻小说?推荐下,再给个下载网址。 excle制作一个可以管理的耗材仓库系统 vivo x3l炉石传说未安装,安装不了,有没有什么解决办法 vivox5sl的vivo商店找不到炉石传说 vivo y927 下载炉石传说哪个版本 条码技术在物流应用中存在的主要问题及怎样解决 申请号KRC5 0UN9 CYXQ T4WJ 8AWF iR启L动时到怎b么e找WJg该Eco办不 别克wj1e系列是什么车 求一个天正建筑2013注册码。我的ID:DJ2540054CENWJE,有哪位大神能帮我... ...能帮我弄一个激活码么? E201 98HK ER9X 5WJ0 RDU4 GAWF J11P T03Z... WJ200变频器E7.2报警是什么意思 SoftEther Client连接不上怎么办? rust怎么去外国服务器 关于电骡和VAGAA 鸽子天敌有哪些动物 我想下载迅游加速器,但看到他们说,这个卸载后会影响游戏。会有副作用...