- 浏览: 2188524 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
1,我们先来熟悉下正则表达式一些字符含义的基础
^行起始标记
$行尾标记
.匹配任意一个字符
[]匹配包含在[]之中的任意一个字符
[^]匹配除[^字符]之外的任意一个字符 9[^01],可以匹配92,93不会匹配90,91
[-]匹配指定范围内的字符,[1-8]匹配1-8之内的任意一个字符
?匹配0次或1次
+匹配1次或多次
*匹配0次或多次
()创建一个匹配的字串
{n}匹配n次
{n,}至少n次
{n,m}n和m之间
|或关系的匹配 ba(r|t)可以匹配bar和bat
\转义字符a\.b匹配a.b
2,grep命令用法:
grep pattern filename 单个文件
grep pattern file1 file2 file3 ... 多个文件
egrep "[a-z]+" file 扩展的正则
egrep -o "[a-z]" 只输出匹配部分
grep -v pattern file 匹配结果反转
grep -c patter file 匹配行数
递归搜索在多级目录里搜索文件:
grep "text" . -R -n
忽略大小写
grep -i "helloW"
匹配多个样式
grep -e "this" -e "key" -o
在搜索里排除,或指定文件
grep "main" . -r --include *.{c,cpp}
grep "main" . -r --exclude *.{c,cpp}
打印匹配之后的行:
匹配结果前2行
匹配结果前后2行
3,使用cut命令,cut命令是用来切分分文件的,很容易的按列切分
1,提取特定的字符 cut -f filed_list filename
例如: cut -f 2,3 filename
-d后面指定定界符
-f后面多个数字使用逗号隔开
其他用法:
N- 从第N个字节,字符或字段到行尾
N-M 从第N个字节到第M个字节
-M 从第一个字节到第M个字节
-b表示字节
-c表示字符
-f用于定义字段
打印前5个字符:
打印前2个字符:
提取多个字段输出:
4,使用sed命令
替换命令sed 's/pattern/replace/' file
替换原始文本 sed -i 's/pattern/replace/' file
替换所有目录sed -i 's/pattern/replace/g' file
移除空白行 sed '/^$/d' file
已匹配字符串标记,这个功能,做高亮最适用了:
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/\<bold\>&\<\/bold\>"/g'
i am a <bold>red</bold>" cat
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/"&"/g'
i am a "red" cat
[root@ganglia 916]#
多个表达式命令: sed -e "pattern1" -e "pattern2"
在shell里面向sed里,传变量
5,使用awk编程
基本语法: awk 'BEGIN {print "start"} pattern {commonds} END {print "end"} ' files
注意awk的脚本,也可以用双引号括住
如下例子:
awk "BEGIN {i=0} {i++} END {print i}" filename
需要记住两点,print打印的参数是逗号分割的,默认空格是定界符 双引号,会被当做拼接符号
NR 记录数量,相当于当前行号
NF 字段数量,执行过程中当前字段数
$0 原始内容
$n 第n列
打印行号,统计行数
读取一行使用getline
注意,这个例子,可以用来读取带表头的excel或者一些文本数据非常方便
awk的灵活的过滤条件
awk 'NR < 5' 行号小于5的行
awk 'NR==1,NR==4' 行号在1到5之间的行
awk '/linux/' 包含linux的行
awk '!/linux/' 不包含linux的行
设置字段定界符:
awk -F: '{ print $NF}' /etc/passwd
awk支持循环:
跟我们所学的C和JAVA还是JavaScrpit都非常接近
awk内置函数
length()字符串长度
index()返回出现位置
split()打散一个数组
substr()截取一个字符串
sub() 替换
match()匹配
6,按列合并多个文件
指定分割符:
截取指定范围字符
逆序输出tac
逆序输出awk
^行起始标记
$行尾标记
.匹配任意一个字符
[]匹配包含在[]之中的任意一个字符
[^]匹配除[^字符]之外的任意一个字符 9[^01],可以匹配92,93不会匹配90,91
[-]匹配指定范围内的字符,[1-8]匹配1-8之内的任意一个字符
?匹配0次或1次
+匹配1次或多次
*匹配0次或多次
()创建一个匹配的字串
{n}匹配n次
{n,}至少n次
{n,m}n和m之间
|或关系的匹配 ba(r|t)可以匹配bar和bat
\转义字符a\.b匹配a.b
2,grep命令用法:
grep pattern filename 单个文件
grep pattern file1 file2 file3 ... 多个文件
egrep "[a-z]+" file 扩展的正则
egrep -o "[a-z]" 只输出匹配部分
grep -v pattern file 匹配结果反转
grep -c patter file 匹配行数
递归搜索在多级目录里搜索文件:
grep "text" . -R -n
忽略大小写
grep -i "helloW"
匹配多个样式
grep -e "this" -e "key" -o
在搜索里排除,或指定文件
grep "main" . -r --include *.{c,cpp}
grep "main" . -r --exclude *.{c,cpp}
打印匹配之后的行:
[root@ganglia 916]# seq 10 | grep 5 -A 2 5 6 7 [root@ganglia 916]#
匹配结果前2行
[root@ganglia 916]# seq 10 | grep 5 -B 2 3 4 5 [root@ganglia 916]#
匹配结果前后2行
[root@ganglia 916]# seq 10 | grep 5 -C 2 3 4 5 6 7 [root@ganglia 916]#
3,使用cut命令,cut命令是用来切分分文件的,很容易的按列切分
1,提取特定的字符 cut -f filed_list filename
例如: cut -f 2,3 filename
[root@ganglia 916]# cut -f1 -d" " a.txt name zhang wang li [root@ganglia 916]#
-d后面指定定界符
-f后面多个数字使用逗号隔开
[root@ganglia 916]# cut -f1,3 -d" " a.txt name score zhang 100 wang 99 li 96 [root@ganglia 916]# cat a.txt name mark score zhang 20 100 wang 36 99 li 12 96 [root@ganglia 916]#
其他用法:
N- 从第N个字节,字符或字段到行尾
N-M 从第N个字节到第M个字节
-M 从第一个字节到第M个字节
-b表示字节
-c表示字符
-f用于定义字段
打印前5个字符:
[root@ganglia 916]# cat b.txt aafgdfdfdfdsfd dffdsfag12343r3 fdfdfdgfgfgf dfdgdtrasf zzzzzzzz ddfdfggdfdf [root@ganglia 916]# cut -c1-5 b.txt aafgd dffds fdfdf dfdgd zzzzz ddfdf [root@ganglia 916]#
打印前2个字符:
[root@ganglia 916]# cut b.txt -c -2 aa df fd df zz dd [root@ganglia 916]#
提取多个字段输出:
[root@ganglia 916]# cut b.txt -c1-3,4-6 --output-delimiter "====>" aaf====>gdf dff====>dsf fdf====>dfd dfd====>gdt zzz====>zzz ddf====>dfg [root@ganglia 916]#
4,使用sed命令
替换命令sed 's/pattern/replace/' file
替换原始文本 sed -i 's/pattern/replace/' file
替换所有目录sed -i 's/pattern/replace/g' file
移除空白行 sed '/^$/d' file
已匹配字符串标记,这个功能,做高亮最适用了:
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/\<bold\>&\<\/bold\>"/g'
i am a <bold>red</bold>" cat
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/"&"/g'
i am a "red" cat
[root@ganglia 916]#
多个表达式命令: sed -e "pattern1" -e "pattern2"
在shell里面向sed里,传变量
[root@ganglia 916]# text=hello [root@ganglia 916]# echo hello world | sed "s/$text/big/" big world [root@ganglia 916]#
5,使用awk编程
基本语法: awk 'BEGIN {print "start"} pattern {commonds} END {print "end"} ' files
注意awk的脚本,也可以用双引号括住
如下例子:
awk "BEGIN {i=0} {i++} END {print i}" filename
[root@ganglia 916]# echo -e "1\n2\n3" | gawk 'BEGIN {print "开始" } {print} END {print "结束"} ' 开始 1 2 3 结束 [root@ganglia 916]#
需要记住两点,print打印的参数是逗号分割的,默认空格是定界符 双引号,会被当做拼接符号
NR 记录数量,相当于当前行号
NF 字段数量,执行过程中当前字段数
$0 原始内容
$n 第n列
[root@ganglia 916]# cat a.txt name mark score zhang 20 100 wang 36 99 li 12 96 [root@ganglia 916]# gawk '{ print $1, $3}' a.txt name score zhang 100 wang 99 li 96 [root@ganglia 916]#
打印行号,统计行数
[root@ganglia 916]# gawk '{ print NR }' a.txt 1 2 3 4
读取一行使用getline
[root@ganglia 916]# seq 6 | gawk 'BEGIN {getline; print "第一行:" $0} {print $0}' 第一行:1 2 3 4 5 6 [root@ganglia 916]#
注意,这个例子,可以用来读取带表头的excel或者一些文本数据非常方便
awk的灵活的过滤条件
awk 'NR < 5' 行号小于5的行
awk 'NR==1,NR==4' 行号在1到5之间的行
awk '/linux/' 包含linux的行
awk '!/linux/' 不包含linux的行
设置字段定界符:
awk -F: '{ print $NF}' /etc/passwd
awk支持循环:
[root@ganglia 916]# gawk 'BEGIN{ for (i=0;i<=10;i++){ print i } }' 0 1 2 3 4 5 6 7 8 9 10 [root@ganglia 916]#
跟我们所学的C和JAVA还是JavaScrpit都非常接近
awk内置函数
length()字符串长度
index()返回出现位置
split()打散一个数组
substr()截取一个字符串
sub() 替换
match()匹配
6,按列合并多个文件
[root@ganglia 916]# cat c.txt 1 2 3 4 [root@ganglia 916]# cat d.txt a b c d e [root@ganglia 916]# pas passwd paste [root@ganglia 916]# pas passwd paste [root@ganglia 916]# paste c.txt d.txt 1 a 2 b 3 c 4 d e [root@ganglia 916]#
指定分割符:
[root@ganglia 916]# paste c.txt d.txt -d "," 1,a 2,b 3,c 4,d ,e [root@ganglia 916]#
截取指定范围字符
[root@ganglia 916]# seq 100 | gawk 'NR==4,NR==10' 4 5 6 7 8 9 10 [root@ganglia 916]#
逆序输出tac
[root@ganglia 916]# seq 5 | tac 5 4 3 2 1 [root@ganglia 916]#
逆序输出awk
[root@ganglia 916]# seq 5 | gawk '{ lifo[NR]=$0 } END{ for(lno=NR;lno>-1;lno--){print lifo[lno]} } ' 5 4 3 2 1 [root@ganglia 916]#
发表评论
-
备忘几个有用的shell脚本
2015-04-07 21:59 1511(1)在shell下,操作hadoop目录,批量命名或删除, ... -
shell脚本杂记(五)
2014-09-22 19:48 20291,找出多个文件所占用的磁盘空间 du f1 f2 [roo ... -
shell脚本杂记(四)
2014-09-19 20:03 17181,wget是一个用于文件 ... -
shell自动化部署批量建立用户和批量SSH配置
2014-09-18 18:29 3633在linux下面,shell脚本熟练使用,有时候可以帮助我们解 ... -
shell自动化部署神器expect
2014-09-17 21:08 4705Shell可以实现简单的控制流功能,如:循环、判断等。但是对于 ... -
shell脚本杂记(二)
2014-09-15 21:25 20291,求两个文件的交集comm a.txt b.txt -1 - ... -
shell脚本杂记(一)
2014-09-12 21:50 20441,登陆系统时,$代表 ... -
跟散仙学shell编程(十五)
2014-08-27 21:24 1848上篇文章,散仙简单介绍了,如何在Linux下以shell脚本的 ... -
跟散仙学shell编程(十四)
2014-08-26 20:59 1940上篇散仙简单介绍了linu ... -
跟散仙学shell编程(十三)
2014-08-25 20:02 1331上篇散仙主要了讲述了gawk进阶的一些用法,本篇我们来了解下载 ... -
跟散仙学shell编程(十二)
2014-08-22 21:27 1590上篇文章散仙写了关于sed进阶,本篇我们来看下在linux中另 ... -
跟散仙学shell编程(十一)
2014-08-21 21:45 1667上篇散仙写了关于shell里面正则的基础知识,本篇我们来特意学 ... -
跟散仙学shell编程(十)
2014-08-20 21:22 1327上篇文章,散仙简单介绍了在linux中,使用sed和gawk编 ... -
跟散仙学shell编程(九)
2014-08-19 21:49 1719上篇散仙说了如何在linux里面构建更好的交互式shell,本 ... -
跟散仙学shell编程(八)
2014-08-18 21:50 1641上篇散仙说了linux里面函数的使用,本篇我们来看下如何在sh ... -
跟散仙学shell编程(七)
2014-08-15 21:46 1813上篇散仙在文章里描述了如何处理linux信号和脚本控制,本节我 ... -
跟散仙学shell编程(六)
2014-08-14 21:53 2108上篇介绍了linux里面的处理数据的方式,本篇散仙来说下,如何 ... -
跟散仙学shell编程(五)
2014-08-13 21:41 1675上一篇写的是处理用户输入,本篇散仙要写的是linux里面的标准 ... -
跟散仙学shell编程(四)
2014-08-12 21:46 1538上篇介绍了for循环命令 ... -
跟散仙学shell编程(三)
2014-08-11 21:38 1751散仙在上一篇文章里写了关于如何使用if-else以及case等 ...
相关推荐
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
Shell脚本合集 Shell脚本是一种脚本语言,利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能。 Shell脚本可以直接使用在Windows、Unix、Linux上面,并且可以调用大量系统内部的功能来解释...
Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...
shell脚本编程100例 Shell脚本编程是一种强大的编程语言,广泛应用于Linux和Unix操作系统中。本书《shell脚本编程100例》为读者提供了100个实战性的shell脚本编程实例,涵盖了检测网段主机状态、猜数字游戏、打印...
IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...
我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要...
Shell脚本编程是Linux系统管理中的重要技能,它允许用户自动化执行一系列命令,大大提高工作效率。以下是一些关于Shell脚本编程的关键知识点: 1. **Hello World脚本**:这是所有编程语言的基础,用于验证环境设置...
Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档收集了250个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、安全防护、数据库备份等核心...
"shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...
**C语言中文网shell脚本教程** 这是一份关于Shell脚本编程的离线学习资料,包含了一系列HTML文件,旨在帮助用户深入理解并掌握Linux Shell脚本编程技术。以下是其中涉及的一些关键知识点: 1. **Shell命令的本质**...
在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...
Android 系统或 Android 应用执行 shell 脚本的方法 Android 系统或 Android 应用执行 shell 脚本是 Android 开发中的一项重要技术,通过执行 shell 脚本,可以实现一些复杂的操作,例如设置网络参数、启动服务等...
### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...
* 在 shell 脚本中可以使用三类命令: Unix 命令、流程控制命令和 Shell 内置命令 * Unix 命令: + `echo`:将文字容打印在屏幕上 + `ls`:文件列表 + `wc`:计算文件行数、单词数和字符数 + `cp`:文件拷贝 + ...
在Linux环境下,shell脚本是自动化任务的强大工具,尤其对于数据导出这样的操作,通过编写shell脚本可以方便地实现定期备份或者按需导出。本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用...
在IT领域,Shell脚本是Linux和Unix操作系统中不可或缺的一部分,它是一种强大的自动化工具,能够帮助用户执行一系列命令,简化日常任务。"shell脚本大全"这个资源可能包含了大量的示例脚本,涵盖了各种用途和场景,...
linux命令行与shell脚本编程.pdf
《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...
* Korn Shell脚本的基本结构:Korn Shell脚本由三部分组成:脚本标头、变量定义和脚本主体。 * 脚本标头的作用:脚本标头用于告诉编写脚本的用户,该脚本将执行什么操作,以及该脚本的编写时间。 * 变量的定义:变量...