shell编程 之 实践出真知(代码实例)

1,在任意一个文件夹里,新建10个空文件,文件名为t1.txt-t10.txt ,文件内容分别是11-20 ,就一行,然后把这个10个文件命名成t1.sh-t10.sh。

老司机版:

$ for (( i=1;i<=10;i++ )) ;do p=`expr $i + 10 `;echo $p >>"t"${i}.txt; done    #创建加写入

$ for fie in `ls *txt` ;do p=`basename $fie .txt` ;mv $fie ${p}.sh ;done     #重命名

小菜鸟版:

#!/bin/bash

for i in {1..10}    #创建加写入

do
        touch test$i.txt
        echo `expr $i + 10 `>test$i.txt
    done

    rename ‘s/txt/sh/‘ *    #重命名

问题:

    sed和 rename这两个命令还挺深奥,改天总结一下。可参考:https://www.cnblogs.com/AloneSword/p/5072698.html

sed命令:

        当下文件夹里有haha.sh,内容是:

abc

cdfa

ghia

jkla lm=abc

mnoa

pqr

stu

vwx

yz

        基本格式:

sed [options] ‘commandfile(s) ,比如:实例1 :sed ‘s/a/b/g‘ filename  注意,是单引号(大部分时候单双通用,但是少数情况单双不同,比如\$).默认在输出中改,不在源文件中改

基本参数:

-n安静模式 ,不显示全文,只显示改动了的或者与命令有关的行,和p配合使用哦。p:打印指定行

-i不只是在终端输出结果,同样修改结果到源文件中 这么用:sed -i ‘s/a/A/g‘ haha.sh

-r用扩展正则表达式匹配,默认普通正则表达式,

sed -r "s/(lm=).*/\1 bcd/g" haha.sh    相当于sed -r "s/lm=.*/lm=bcd/g" haha.sh,但是明显高端很多。比如下面这个:

      echo "wo he ni"|sed -r ‘s/(wo)(.*)(ni)/\3\2\1/g‘    sed里小括号的顺序默认是\1,\2,\3,函数返回ni he wo 

-e支持sed后有多项命令

sed -e "s/a/A/g;s/b/B/g" haha.sh    或者 sed -e "s/a/A/g"  -e "s/b/B/g" haha.sh 在文件中同时替换a和b,第一个例子可以不加-e。

-f指定执行filename文件中的命令,应该是有编译功能的

假设有个文件名字叫tmp,文件里内容是s/a/A/g;s/b/B/g,那么我们可以直接用tmp来替换

sed -f tmp haha.sh  在文件中同时替换a和b

sed中特有的命令:比如上一个实例1中的‘s‘ 和‘g‘

s  表示行内单词或者字母的替换:s类似于y轴,g类似于x轴,s定位行,g定位行内的第几个

sed ‘s/a/A/g‘ haha.sh    全文把a替换成A

sed ‘1s/a/A/g‘ haha.sh    只在第一行中把a替换成A,默认输出haha.sh的所有替换过的内容,加上-n以后,就是之输出改动过的内容,即改过的第一行

sed ‘s/a/A/2g‘ haha.sh   在所有的行中把每行第二个a变成A,

sed ‘1s/.*/AINI/g‘ haha.sh    把第一行整行内容替换成AINI,.*的意思是正则匹配所有字符。

sed " s/haha/${a}/g" haha.sh    把文本haha替换成变量a,变量a可以是自己赋值的,也可以是别的命令或者程序计算得来的。

c  整行替换

sed ‘c 123‘ haha.sh    默认是把所有的行都替换成123,不用管内容,(空格可以用斜杠替换)

sed ‘2c 123‘ haha.sh    把第二行改成123,别的不变。

a  相当于add,添加一行内容到指定的行后边

sed ‘a 123 456 789‘ haha.sh    默认把每一行的后面添加上123 456 789

sed ‘1a 123456‘ haha.sh    在第一行的后面添加一行123456

p  打印指定行,通常与-n参数配合使用

sed -n ‘s/a/A/p‘ haha.sh    打印出所有执行了替换的行,注意,此处的p不可以用g替代。

sed -n ‘5p‘ haha.sh    打印出haha.sh的第五行

sed -n ‘2,5p‘ haha.sh    打印出haha.sh的2-5行

sed -n ‘/c.f/p‘ haha.sh    打印出符合正则c.f的所有匹配的行,注意,第一个斜杠是必须的

d  删除指定行

sed ‘1,5d‘ haha.sh    删除haha.sh中的指定行

sed ‘/^\s*$/d‘ haha.sh    删除空行

rename命令

基本格式:

        sed [options] ‘command‘ file

options:

         -v  显示成功重命名的文件  实例1:rename -v ‘s/suibian/abc/‘ *    suibian更名为abc,会附带提示:suibian renamed as abc

        -n  不是真的去改名,而是用做测试,该命令会把要改要改的文件打印出来    实例:rename -n ‘s/abc/suibian/‘ *    把abc变成suibian, 结果:rename(abc, suibian)

        -f 则表示会强制修改。

rename中的替换命令

        基本和sed一样,常用s和g,另外,这俩命令最好只用单引号,单引号内部支持转义。

        实例:

rename ’s/a/A/g‘  *   当前文件夹下所有文件名中带a的全替换成A。*表示所有文件。

rename ‘s/a/A/’  *.txt    d当前文件夹下所有txt文件中,有a的都变成A,”g"可省。

rename ‘s/$/S/‘ *    把所有文件的末尾添加一个S,rename ‘s/\$/S/‘ *    把文件名的末尾是“$”符号的那个文件,改成文件末尾是S. 但是,如果改用双引号或者不加引号,不论是否添加了转移符号,结果都是在每个文件的末尾添加了S,可见rename还是多用单引号才好。

rename -n ‘s/\.sh//‘ *.sh    把所有.sh结尾的文件去掉后缀名.

rename -n ‘s/[1]/number/‘ *.sh    把文件名中含有数字1的,其中的1替换成number

常用的正则匹配格式

         x?  匹配 0 次或一次 x 字符串

        x*  匹配 0 次或多次 x 字符串,但匹配可能的最少次数

        x+  匹配 1 次或多次 x 字符串,但匹配可能的最少次数

        .*  匹配 0 次或一次的任何字符

        .+  匹配 1 次或多次的任何字符

        {m} 匹配刚好是 m 个 的指定字符串

        {m,n}匹配在 m个 以上 n个 以下 的指定字符串

        []  匹配符合 [] 内的字符

       [^] 匹配不符合 [] 内的字符

        [0-9]匹配所有数字字符

        [a-z]匹配所有小写字母字母

        ^   匹配某字符开头的字符

       $   匹配字符结尾的字符

       \d  匹配一个数字的字符,和 [0-9] 语法一样

       \d+  匹配多个数字字符串,和 [0-9]+ 语法一样

        \w   英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样

        \W   非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样

        \s    空格,和 [\n\t\r\f] 语法一样

        a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串

    

p { margin-bottom: 0.1in; direction: ltr; color: #00000a; line-height: 120%; text-align: left; orphans: 2; widows: 2 }
p.western { font-family: "Tahoma", serif; font-size: 11pt }
p.cjk { font-family: "微软雅黑"; font-size: 11pt }
p.ctl { font-family: "DejaVu Sans"; font-size: 11pt }
a:link { color: #0000ff }
p { margin-bottom: 0.1in; direction: ltr; color: #00000a; line-height: 120%; text-align: left; orphans: 2; widows: 2 }
p.western { font-family: "Tahoma", serif; font-size: 11pt }
p.cjk { font-family: "微软雅黑"; font-size: 11pt }
p.ctl { font-family: "DejaVu Sans"; font-size: 11pt }
a:link { color: #0000ff }

原文地址:https://www.cnblogs.com/0-lingdu/p/9269115.html

时间: 2024-07-31 21:46:43

shell编程 之 实践出真知(代码实例)的相关文章

实践出真知:MVC和MVVM

title: 实践出真知:MVC和MVVM date: 2018-04-13 08:40:02 tags: mvc mvvm 数据驱动 categories: web --- 理论来自于实践,并指导于实践 - 佚名 我相信在MVC等理论形成之前,就已经有人在付诸MVC的实践.只是后来有人总结下来,并指导人们做软件开发.这种设计典范并不是只有后台的代码才有,前端也可以有很好的框架,像react和vue. 为什么这么强调实践.因为在我学习MVC理论的时候,我是蒙蔽的.虽然看了很多优秀的文档,比如,阮

实践出真知——基于squid实现正向代理实践

实践出真知--基于squid实现正向代理实践 前言 ? 俗话说得好:时间是治愈一切伤口的良药,实践是检验真理的唯一标准!本文将结合代理服务器的基本原理,进行基于squid软件实现传统(标准)代理(正向代理)以及透明代理的实例演示. 先说说squid是个啥 ? 避(kai)免(ge)被(wan)喷(xiao),还是介绍一下什么是squid吧. squid的概念 ? squid是一种用来缓存Internet数据的软件.用于接受来自客户端需要下载对象(object)的请求并适当的处理这些请求.也就是说

万事开头难 &amp;&amp; 实践出真知

实践出真知,真是千古不变的真理. 前几天在顺手做一个万年历项目,实现了用TFT屏显示实时时间,日期,温度,和按键设置时间,能在特定时间显示特定的话语在显示屏上面.其实这个项目现在想想还是挺简单的.我的功能也不是很多.但是在认真做这个项目的时候,真的确确实实让我自己充实了很多,学了很多知识,也发现了很多我之前没有发现的问题.也就只有在实际动手中才能发现问题的所在.在我们这个电气工程专业,我觉得技能是检验能力的重要标准之一.等到这个项目做完的时候,我又陷入了无聊和无方向的循环中.每天也在学习,但是感

实践出真知——基于squid实现反向代理实践

实践出真知--基于squid实现反向代理实践 前言 ? 本文主要进行基于squid软件实现反向代理的实验流程演示,阅读本文前首先需要明白反向代理的概念和原理,其次需要基于上篇文章的实验从而继续进行. 实验流程 ? 上次做了透明模式正向代理实验,再此基础上完成反向代理的实操流程. 服务器规划 client ip:192.168.100.100(Win7/win10) squid 代理服务器IP地址:20.0.0.128 192.168.100.1 两台web服务器ip地址:web1:20.0.0.

实践出真知——一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离

实践出真知--一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离 前言 ? 想必大家对于Nginx和Tomcat都非常熟悉了,Nginx的应用非常广泛,不仅是对web静态资源非常友好,而且也是非常实用的反向代理和负载均衡软件.结合后端Tomcat的服务,从而搭建Nginx+Tomcat集群. ? 对于直接想要实践的朋友而言可以获取本文的链接中的软件包后直接看第三备份的内容. 一.集群搭建结构及拓扑 1.1集群架构图示 Nginx+Tomcat集群的结构示意图如下: 1.2系统环境与

Shell编程之批量安装服务脚本实例剖析

今天分享一下昨天写过的一个小脚本运行的整个过程运行结果如下:   剖析如下: #!/bin/bash # Date: 4:42 2018-2-10 # Mail: [email protected]163.com # Founder: <YanKai> # Describe: This is a one - button installation service script # 提示:使用此脚本时,尽量先选择第一项配置Yum源! red_col="\e[1;31m" #定

【朝花夕拾】Android自定义View篇之(九)多点触控(下)实践出真知

前言 在上一篇文章中,已经总结了MotionEvent以及多点触控相关的基础理论知识和常用的函数.本篇将通过实现单指拖动图片,多指拖动图片的实际案例来进行练习并实现一些效果,来理解前面的理论知识.要理解本文的代码,需要先掌握上一篇的理论知识,事件处理基础,以及一定的自定义View基础,这些我也在本系列文章的前几篇中讲过,有兴趣的可以按照本系列的顺序依次阅读学习,相信您一定会有不小的收获.. 一.实现单指拖动图片 要实现单指拖动图片,大致思路就是监控手指的ACTION_MOVE事件.手指移动过程中

前端样式实践出真知系列(一)

1.float:对前面的元素不会有影响,无论是块级元素还是行内元素的float,对后面的元素的影响都是:先假设当前元素不存在,后面元素的位置应该是什么样子的,然后再考虑下,float后的元素的大小是其真正的大小(即使是块级元素,大小=内容+padding+border+margin),这个大小会对后一个元素形成挤压. (备注:float和postion:absolution的主要区别是前者不会后受影响的内容重叠,会形成挤压,后者会重叠,相当于在另一个层上.) 使用float和postion:ab

前端样式实践出真知系列(二)

1.CSS 继承是指我们设置上级(父级)的CSS样式,上级(父级)及以下的子级(下级)都具有此属性. 一般只有文字文本一些样式具有继承特性,如文字大小.文字加粗.文字颜色.字体等.其它大多数样式属性不会被继承下来 常见继承css属性:font .color: 2.很多html标签有自己默认的属性,这样有时会给我们带来很多麻烦和不便,所以一个好的前端工程师,最好在一开始,对常用标签的样式初始化下. 常用的初始化方法,可参考:http://www.divcss5.com/template/m17.s