`
qindongliang1922
  • 浏览: 2181007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117401
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125817
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59802
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71227
社区版块
存档分类
最新评论

shell脚本杂记(三)

阅读更多
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}

打印匹配之后的行:
[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]# 





0
2
分享到:
评论

相关推荐

    LinuxShell脚本学习基础视频

    资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...

    109个shell脚本合集.pdf

    Shell脚本合集 Shell脚本是一种脚本语言,利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能。 Shell脚本可以直接使用在Windows、Unix、Linux上面,并且可以调用大量系统内部的功能来解释...

    shell脚本编程100例

    shell脚本编程100例 Shell脚本编程是一种强大的编程语言,广泛应用于Linux和Unix操作系统中。本书《shell脚本编程100例》为读者提供了100个实战性的shell脚本编程实例,涵盖了检测网段主机状态、猜数字游戏、打印...

    Shell脚本学习教程PDF版

    Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...

    IDEA中编写并运行shell脚本的实现

    IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...

    Shell脚本中获取进程ID的方法

    我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要...

    Shell脚本编程100例

    Shell脚本编程是Linux系统管理中的重要技能,它允许用户自动化执行一系列命令,大大提高工作效率。以下是一些关于Shell脚本编程的关键知识点: 1. **Hello World脚本**:这是所有编程语言的基础,用于验证环境设置...

    250个shell脚本

    Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档收集了250个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、安全防护、数据库备份等核心...

    shell脚本与Makefile区别.docx

    "shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...

    C语言中文网shell脚本教程

    **C语言中文网shell脚本教程** 这是一份关于Shell脚本编程的离线学习资料,包含了一系列HTML文件,旨在帮助用户深入理解并掌握Linux Shell脚本编程技术。以下是其中涉及的一些关键知识点: 1. **Shell命令的本质**...

    android系统中调用shell脚本

    在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...

    如何让Android系统或Android应用执行shell脚本

    Android 系统或 Android 应用执行 shell 脚本的方法 Android 系统或 Android 应用执行 shell 脚本是 Android 开发中的一项重要技术,通过执行 shell 脚本,可以实现一些复杂的操作,例如设置网络参数、启动服务等...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...

    linux下shell脚本实现数据的导出

    在Linux环境下,shell脚本是自动化任务的强大工具,尤其对于数据导出这样的操作,通过编写shell脚本可以方便地实现定期备份或者按需导出。本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用...

    Linux-shell脚本全面学习.pdf

    * 在 shell 脚本中可以使用三类命令: Unix 命令、流程控制命令和 Shell 内置命令 * Unix 命令: + `echo`:将文字容打印在屏幕上 + `ls`:文件列表 + `wc`:计算文件行数、单词数和字符数 + `cp`:文件拷贝 + ...

    shell脚本大全

    在IT领域,Shell脚本是Linux和Unix操作系统中不可或缺的一部分,它是一种强大的自动化工具,能够帮助用户执行一系列命令,简化日常任务。"shell脚本大全"这个资源可能包含了大量的示例脚本,涵盖了各种用途和场景,...

    Linux 命令与Shell 脚本编程pdf书籍

    《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...

    korn-shell脚本入门.docx

    * Korn Shell脚本的基本结构:Korn Shell脚本由三部分组成:脚本标头、变量定义和脚本主体。 * 脚本标头的作用:脚本标头用于告诉编写脚本的用户,该脚本将执行什么操作,以及该脚本的编写时间。 * 变量的定义:变量...

    Shell脚本专家指南

    Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...

Global site tag (gtag.js) - Google Analytics