shell字符串截取

shell字符串截取,第1张

grep 在文件中提取行,cut awk sed 提取列

输出格式

awk '条件一{动作一} 条件2{动作二} ...' 文件名

条件 一般使用关系表达式作为条件 x>10

动作 格式化输出,流程控制语句

print 不需要加换行符

df -h 查看系统容量使用情况

grep 截取行

awk 提取

cut 截取

手动指定分隔符,要加入begin

sed 是一种几乎包括在所有unix平台的轻量流编辑器。sed主要是用来将数据进行选取,替换,删除和新增的命令。

动作

删除2,3行

接收管道符

sort [选项] 文件名

sort /etc/passwd

sort -r /etc/passwd

按数值排序

wc [选项] 文件名

一、关键字截取

1、# 截取之后内容,一个#表示从左边开始,两个#表示从右边开始

str#*a 截取从左边开始第一个a字符之后的内容

str##*a 截取从右边开始第一个a字符之后的内容

2、% 截取之前内容,一个%表示从左边开始,两个%表示从右边开始

str%a* 截取从左边开始第一个a字符之前的内容

str%%a* 截取从右边开始第一个a字符之前的内容

二、定位截取

str:a:b 表示截取从str中第(a-1) 个位置开始,b个字符

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

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

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

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

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

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

例如:请在李白的这首《行路难》中找出第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:xyk用户,新卡下来的随机密码;

场景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于深圳


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11490960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存