老李分享:《Linux Shell脚本攻略》 要点(四)
老李分享:《Linux Shell脚本攻略》 要点(四)
1、IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
2、grep用法
//在多级目录中对文本进行递归检索
[root@localhost program_test]# grep "yang" ./ -Rn
./test.txt:6:laoyang
./right.txt:1:1 yang man
//忽略大小写匹配
[root@localhost program_test]# echo hello world | grep -i "HELLO"
hello world
//递归搜索所有.c和.cpp文件
[root@localhost program_test]# grep "main()" . -r --include *.{c,cpp}
./hello.c:int main()
sin.c:int main()
hello.cpp:int main()
//匹配某个结果之后的几行
[root@localhost program_test]# echo -e "a\nb\nc\na\nb\nc"| grep a -A 1
a
b
--
a
b
3、cut命令
cut,将文本按照列进行切割的小工具。
//-d分界符; -f要提取的列
[root@localhost program_test]# cut -d ":" -f5 --complement passwd_yang
root:x:0:0:/root:/bin/bash
bin:x:1:1:/bin:/sbin/nologin
[root@localhost program_test]# cut -c1-5 passwd_yang
root:
bin:x
daemo
adm:x
//统计特定文件中的词频
[root@localhost program_test]# cat word_freq.sh
#!/bin/bash
if [ $# -ne 1 ];
then
echo "Usage: $0 filename"
exit -1
fi
filename=$1
egrep -o "\b[[:alpha:]]+\b" $filename | \
awk '{ count[$0]++ } \
END { printf("%-14s%s\n","word","Count");\
for(ind in count) \
{ printf("%-14s%d\n",ind,count[ind]); } }'
4、sed命令(stream editor 流编辑器)
适用文本处理.
//1.替换,从第3个开始替换
[root@localhost program_test]# echo this thisthisthis | sed 's/this/THIS/3g'
this thisTHISTHIS
//2.删掉空白行
[root@localhost program_test]# sed '/^$/d' choice.sh
//3.已匹配的字符串标记&
[root@localhost program_test]# echo this is an example | sed 's/\w\+/[&]/g'
[this] [is] [an] [example]
//4.替换举例.
[root@localhost program_test]# cat sed_data.txt
11 abc 111 this 9 file contains 111 11 88 numbers 0000
[root@localhost program_test]# cat sed_data.txt | sed 's/\b[0-9]\{3\}\b/NUMBER3/g'
11 abc NUMBER3 this 9 file contains NUMBER3 11 88 numbers 0000
//5.实战举例
获取ntp同步的错误信息(假定当前设备没有联网)
举例一:ntpdate 8.8.8.8
15 Jan 07:28:26 ntpdate[7137]: bind() fails: Permission denied
举例二:ntpdate google.com
[root@localhost cutDemo]# ntpdate msf22.com
Error resolving msf22.com: Name or service not known (-2)
15 Jan 07:30:54 ntpdate[7169]: Can't find host msf22.com: Name or service not known (-2)
15 Jan 07:30:54 ntpdate[7169]: no servers can be used, exiting
想获取[71**]:后的出错信息,之前的删除。脚本如下:
[root@localhost cutDemo]# ntpdate msft22.com 2>&1 | sed 's/.*\]\: //g'
Error resolving msft22.com: Name or service not known (-2)
Can't find host msft22.com: Name or service not known (-2)
no servers can be used, exiting
解释: ntpdate msft22.com 2>&1 //2>&1 标准输错重定向到标准输出。
sed 's/.*\]\: //g' //删除文件中"]:"前面的字符串。
5、awk工具,用于数据流,对列、行进行操作。
//1)、awk的实现方式
[root@localhost program_test]# echo -e "line1\nline2" | awk 'BEGIN { print "begin...\n" } { print } END { print "end...\n" }'
begin...
line1
line2
end...
//2)、awk实现累加求和
[root@localhost program_test]# seq 5 | awk 'BEGIN { sum=0; print "summary:" } { print $1"+"; sum+=$1; } END { print "=="sum }'
summary:
1+
2+
3+
4+
5+
==15
//3)、awk 设定定界符.
//-F 定界符 $NF 一行中的最后一个字段
[root@localhost program_test]# awk -F: '{ print $1 "\t" $NF }' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
//4)、打印文件中的每个字母
[root@localhost program_test]# cat read_each_word.sh
cat hello.c | \
( while read line;
do
#echo $line;
for word in $line;
do
#echo $word;
for((i=0;i<${#word};i++))
do
echo ${word:i:1} ;
done
done
done )
//5)、打印第4-6行内容
[root@localhost program_test]# seq 100 | awk 'NR==4, NR==6'
4
5
6
//6)、awk实现类似tac逆序的功能.
[root@localhost program_test]# seq 9 | awk '{ lifo[NR]=$0; lno=NR } END { print "NR = " NR; for(;lno>-1;lno--) { print lifo[lno]; } }'
NR = 9
9
8
7
6
5
4
3
2
1
老李分享:《Linux Shell脚本攻略》 要点(四)的更多相关文章
- Linux Shell 脚本攻略学习--四
linux中(chattr)创建不可修改文件的方法 在常见的linux扩展文件系统中(如ext2.ext3.ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设 ...
- 老李分享:《Linux Shell脚本攻略》 要点(八)
老李分享:<Linux Shell脚本攻略> 要点(八) 1.打印进程 [root@localhost program_test]# ps -e | head PID TTY ...
- 老李分享:《Linux Shell脚本攻略》 要点(七)
老李分享:<Linux Shell脚本攻略> 要点(七) 1.显示给定文件夹下的文件的磁盘适用情况 [root@localhost program_test]# du -a -h ./ ...
- 老李分享:《Linux Shell脚本攻略》 要点(六)
老李分享:<Linux Shell脚本攻略> 要点(六) 1.打印网络接口列表 [root@localhost touch_more]# ifconfig | cut -c-10 | ...
- 老李分享:《Linux Shell脚本攻略》 要点(五)
老李分享:<Linux Shell脚本攻略> 要点(五) //1.打包.解包 [root@localhost program_test]# tar -cf output.tar 11. ...
- 老李分享:《Linux Shell脚本攻略》 要点(三)
老李分享:<Linux Shell脚本攻略> 要点(三) 1.生产任意大小的文件 [root@localhost dd_test]#[root@localhost dd_test]# ...
- 老李分享:《Linux Shell脚本攻略》 要点(二)
老李分享:<Linux Shell脚本攻略> 要点(二) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课 ...
- 老李分享:《Linux Shell脚本攻略》 要点(一)
老李分享:<Linux Shell脚本攻略> 要点(一) 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...
- 读《Linux Shell脚本攻略》(第2版) 总结
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...
随机推荐
- 关于boostrap的thead固定tbody滚动
原文地址:http://blog.csdn.net/bbsyi/article/details/51126041# 1 <!DOCTYPE html> 2 <html> 3 & ...
- [Usaco2014 Open Gold ]Cow Optics (树状数组+扫描线/函数式线段树)
这道题一上手就知道怎么做了= = 直接求出原光路和从目标点出发的光路,求这些光路的交点就行了 然后用树状数组+扫描线或函数式线段树就能过了= = 大量的离散+模拟+二分什么的特别恶心,考试的时候是想到 ...
- 为 .NET Core 设计一个 3D 图形渲染库
原文地址:https://mellinoe.wordpress.com/2017/02/08/designing-a-3d-rendering-library-for-net-core/ 作者:ERI ...
- iOS开发学习路径的一些建议
结合自己情况聊下iOS学习建议,这里不讲大道理,说说具体怎么做.欢迎大家拍砖. 1.第一点要求 ,能比较顺畅的阅读官方的文档 如果你连官方的文档读起来都非常困难,那你还谈什么提高和进阶,咱们学习iOS ...
- ASP.NET MVC 导出Word报表
最近要做MVC导出Word报表功能.查了查资料发现一个好用的插件就是Aspose.Word.这个插件也很有名气,也很好用. 1.首先就是引用该插件 2.填充Word模版 3.后台操作 private ...
- javaweb 打包为安卓apk(1)-Hbuilder
需求:当前已经完成java web项目开发,java web项目前端使用自适应框架(bootstrap),想使用最简单方式生成一个安卓apk,无需进行安卓开发(类似于手机浏览器访问一样) 要求:项目已 ...
- javascript中加var和不加var的区别
Javascript是遵循ECMAScript标准下的一个产物,自然ECMAScript的标准其要遵循. 先来看下var关键字的定义和用法 var 语句用于声明变量. JavaScript 变量的创建 ...
- 项目架构开发:数据访问层之Query
接上文 项目架构开发:数据访问层之Repository 上一章我们讲了IRepository接口,这张我们来讲IQuery 根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操 ...
- Unity Shader 知识点总结(一)
在学习了一段时间的Unity Shader后,打算写一些知识总结,便于今后的查找.如有错误,希望大家指出更改. 本文参照的unity入门精要一书,做一个知识归纳,如有兴趣可以看看其开源的部分,是一本比 ...
- 用stm32f0x建立新的工程重要步骤
stm32f10x系列新建空的工程主要原理: 1.添加启动文件 不同的芯片类型的启动文件的容量是不同的,选择适合该芯片的容量作为启动文件. 注意:启动文件是汇编语言编写的,所以文件的后缀名为.s 2. ...