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] '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命令
基本格式:
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 字符串
shell编程 之 实践出真知(代码实例)的更多相关文章
- shellb编程 之 实践出真知
1.查询file1 里面空行的所在行号 纯空行:awk ‘{if($0~/^$/)print NR}’ file 空行和带空格,制表符等的行:awk '$0~/^\s*$/' file 2.查询fil ...
- 万事开头难 && 实践出真知
实践出真知,真是千古不变的真理. 前几天在顺手做一个万年历项目,实现了用TFT屏显示实时时间,日期,温度,和按键设置时间,能在特定时间显示特定的话语在显示屏上面.其实这个项目现在想想还是挺简单的.我的 ...
- 【朝花夕拾】Android自定义View篇之(九)多点触控(下)实践出真知
前言 在上一篇文章中,已经总结了MotionEvent以及多点触控相关的基础理论知识和常用的函数.本篇将通过实现单指拖动图片,多指拖动图片的实际案例来进行练习并实现一些效果,来理解前面的理论知识.要理 ...
- Jfinal——实践出真知
什么是Jfinal? JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所 ...
- python练习 之 实践出真知 中心扩展法求最大回文子串 (leetcode题目)
1 问题,给定一个字符串,求字符串中包含的最大回文子串,要求O复杂度小于n的平方. 首先需要解决奇数偶数的问题,办法是:插入’#‘,aba变成#a#b#a#,变成奇数个,aa变成#a#a#,变成奇数个 ...
- 实践出真知-所谓"java没有指针",那叫做引用!
java没有指针,那我们如何实现动态数组呢? 上篇评论提及 ”不仅有vector,还有ArrayList,还有List,可做选择“. "java没有指针",那叫做引用! 今天尝试了 ...
- shell编程基础练习
shell作为一个人机交互的接口,在Linux中发挥着很大的作用,而shell编程则是减轻系统工程师工作的利器,这里总结一下shell编程的主要内容(趁着程序运行的空档). 本文的基本结构是shell ...
- [ SHELL编程 ] echo和printf使用实例
本文主要描述Linux系统中echo和printf命令的使用方法,包括命令参数的含义.使用技巧. 1.echo 了解一个命令我们首先要知道它能做什么,它有哪些参数,参数的含义,可以实现我们哪方面 ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
随机推荐
- ES6(promise)_解决回调嵌套简单应用
一.前言 这个小案例是在node平台上应用的所以需要保证你的电脑: 1.安装和配置node.js环境 2.需要用node.js来开启一个http-server: 开启方法:https://blog.c ...
- Hadoop生态圈-开启Ambari的Kerberos安全选项
Hadoop生态圈-开启Ambari的Kerberos安全选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在完成IPA-Server服务的安装之后,我们已经了解了他提供的基础功 ...
- Memcache在.Net中的使用
一.Memcache基本概念(socket服务器) 本质:是一个在内存上存储的hash表,key的最大值是255字符,最长过期时间为30天 特点:惰性删除,没有监控数据过期的机制,实现最基本的key- ...
- [C#]一个简易的、轻量级的方法并行执行线程辅助类
一个简易的.轻量级的方法并行执行线程辅助类 在实际应用中,经常要让多个方法并行执行以节约运行时间,线程就是必不可少的了,而多线程的管理经常又是一件头疼的事情,比如方法并行执行异步的返回问题,方法并 ...
- SQL Server2012安装流程
今天手比较抽风,把原来的SQL Server给卸载了,卸载还卸了半天,真是…… 安装时找了好多教程,结果都不是很详细,然后准备自己摸索一下,把这个过程记录下来,供大家参考,如果有不当的地方,欢迎指正, ...
- Spark设计理念与基本架构
1.基本概念 Spark中的一些概念: RDD(resillient distributed dataset):弹性分布式数据集. Partition:数据分区.即一个RDD的数据可以划分为多少个分区 ...
- vue使用字体图标转码问题
使用iconfont字体之后,出现的是一个方框,而没有出现相应的图标 需要通过String.fromCharCode方法转成指定unicode编码对应的十六进制字符 <div class=&qu ...
- java.io.OutputStream & java.io.FileOutputStream
java.io.OutputStream & java.io.FileOutputStream 1.Java.io.OutputStream(字节输出流) 字节输出流,这是一个抽象类,是表示输 ...
- jsp查询修改
也是只帖代码....不讲解. 1.search.jsp <%@ page language="java" import="java.util.*" pag ...
- java操作数据库:分页查询
直接上.... 还是用之前的goods表,增加了一些数据 1.实体类Goods // 封装数据 public class Goods { private int gid; private String ...