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] 'command' file(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] 'commandfile

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字符 的字符串
 

    


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

  1. shellb编程 之 实践出真知

    1.查询file1 里面空行的所在行号 纯空行:awk ‘{if($0~/^$/)print NR}’ file 空行和带空格,制表符等的行:awk '$0~/^\s*$/' file 2.查询fil ...

  2. 万事开头难 && 实践出真知

    实践出真知,真是千古不变的真理. 前几天在顺手做一个万年历项目,实现了用TFT屏显示实时时间,日期,温度,和按键设置时间,能在特定时间显示特定的话语在显示屏上面.其实这个项目现在想想还是挺简单的.我的 ...

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

    前言 在上一篇文章中,已经总结了MotionEvent以及多点触控相关的基础理论知识和常用的函数.本篇将通过实现单指拖动图片,多指拖动图片的实际案例来进行练习并实现一些效果,来理解前面的理论知识.要理 ...

  4. Jfinal——实践出真知

    什么是Jfinal? JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所 ...

  5. python练习 之 实践出真知 中心扩展法求最大回文子串 (leetcode题目)

    1 问题,给定一个字符串,求字符串中包含的最大回文子串,要求O复杂度小于n的平方. 首先需要解决奇数偶数的问题,办法是:插入’#‘,aba变成#a#b#a#,变成奇数个,aa变成#a#a#,变成奇数个 ...

  6. 实践出真知-所谓"java没有指针",那叫做引用!

    java没有指针,那我们如何实现动态数组呢? 上篇评论提及 ”不仅有vector,还有ArrayList,还有List,可做选择“. "java没有指针",那叫做引用! 今天尝试了 ...

  7. shell编程基础练习

    shell作为一个人机交互的接口,在Linux中发挥着很大的作用,而shell编程则是减轻系统工程师工作的利器,这里总结一下shell编程的主要内容(趁着程序运行的空档). 本文的基本结构是shell ...

  8. [ SHELL编程 ] echo和printf使用实例

    本文主要描述Linux系统中echo和printf命令的使用方法,包括命令参数的含义.使用技巧. 1.echo    了解一个命令我们首先要知道它能做什么,它有哪些参数,参数的含义,可以实现我们哪方面 ...

  9. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

随机推荐

  1. ES6---扩展运算符和rest‘...’(三点运算符),在数组、函数、set/map等中的应用

    ES6新增的三点运算符,是由三个点表示,在数组中扮演着重要的角色,可以对数组进行合并与分解.可以对set等数据结构进行转换.可以对函数参数进行简化表示,接下来,我们一起揭开其神秘面纱… ●三点—res ...

  2. No cached version of cn.lightsky.infiniteindicator:library:1.2.2 available for offline mode.

    去掉勾勾

  3. C/S,B/S的应用的区别

    C/S和B/S都是软件架构方式: C/S(Client/Server) :客户端/服务器结构,其中客户端和服务器端都是独立的计算机,客户端是面向用户的应用程序或者是接口,服务器端通常采用高性能的PC. ...

  4. RJ45连接器

    http://www.huilyn.com/path315.html      HBJ-6308ANLF http://www.hanrun.com/en/           HR971169C h ...

  5. vim: 基本知识;

    1. 函数: function!   funcName(para.) content; endfunction 如果添加!,将覆盖已存在的重名函数: 注: 该博文为扩展型: 2.调用外部命令: exe ...

  6. org.hibernate.MappingException: class com.itheima.domain.Customer.java not found while looking for property: cust_id at org.hibernate.internal.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.

    我这次异常的出现时,没有配置逐渐生成策略.

  7. linux crontab定时任务不执行

    如crontab 没有成功,检测crontab 服务是否启动, /etc/init.d/crond status 查看crond状态 /etc/init.d/crond restart 重启crond ...

  8. jdk和jvm基本介绍

    一.JDK和JRE? 在刚入门java开发的时候,第一步都要从官网下载JDK来帮助开发,下载下来安装之后看到安装目录结构如下 bin目录:存放Java的编译器.解释器等工具(可执行文件). db目录: ...

  9. eclipse+tomcat+maven+springmvc+mybatis+mysql集成WebService插件(Axis2+CXF)

    $1 环境介绍 $1.1 Eclipse Java EE IDE for Web Developers:Neon.2 Release (4.6.2) $1.2 Maven:3.3.9 $1.3 Spr ...

  10. Oracle12c开启scott账户

    在oracle目录app\orcl\product\12.1.0\dbhome_1\NETWORK\ADMIN\下tnsnames.ora文件最后加入以下内容 PDBORCL = (DESCRIPTI ...