最近一直在研究shell脚本这块,刚好闲下来整了下自己手头上比较好的资料中的一些范例,以下是我整理的鸟哥私房菜里面正则表达式里面比较基础的一些语法详解,适合新手查阅。
首先先复制一段范例:
# vi regular_express.txt ------------------------------- "Open Source" is a good mechanism to develop programs. apple is my favorite food. Football game is not use feet only. this dress doesn't fit me. However, this dress is about $ 3183 dollars. GNU is free air not free beer. Her hair is very beauty. I can't finish the test. Oh! The soup taste good. motorcycle is cheap than car. This window is clear. the symbol '*' is represented as start. Oh!My god! The gd software is a library for drafting programs. You are the best is mean you are the no. 1. The world <Happy> is the same with "glad". I like dog. google is the best tools for search keyword. goooooogle yes! go! go! Let's go. # I am VBird --------------------------------
#export LANG=C
grep
1.搜寻特定字符串"the"
注: n为显示行号
# grep -n 'the' regular_express.txt
2.反向搜寻特定字符串"the"
# grep -vn 'the' regular_express.txt
3.取得任意大小写"the"的这个字符串
# grep -in 'the' regular_express.txt
4.利用括号 [] 来搜寻集合字符
搜索test或taste这两个单词时,发现他们有共同的't?st',所以可以这么搜寻
# grep -n 't[ae]st' regular_express.txt
# grep -n 'oo' regular_express.txt
# grep -n '[^g]oo' regular_express.txt
# grep -n '[^a-z]oo' regular_express.txt
# grep -n '[0-9]' regular_express.txt
# grep -n '[^[:lower:]]oo' regular_express.txt # grep -n '[[:digit:]]' regular_express.txt
5.显示行首为'the'的字符串
# grep -n '^the' regular_express.txt
# grep -n '^[a-z]' regular_express.txt
6.显示行尾为点 . 的那一行
# grep -n '\.$' regular_express.txt
7.显示5-9行数据
# cat -An regular_express.txt |head -n 10 |tail -n 6
8.显示空白行
# grep -n '^$' regular_express.txt
9.找出g??d字符串,起头g结束d的四个字符串
# grep -n 'g..d' regular_express.txt
10. o*代表空字符(就是有没有字符都可以)或者一个到N个o字符,所以grep -n 'o*' regular_express.txt就会把所有行全部打印出来,
11.oo*代表o+空字符或者一个到N个o字符,所以grep -n 'oo*' regular_express.txt就会把o,oo,ooo等的行全部打印出来
12."goo*g"代表gog,goog,gooog...等
# grep -n 'goo*g' regular_express.txt
13.找出含g...g字符串的行
注: .代表任意字符, .*则就代表空字符或者一个到N个任意字符
# grep -n 'g.*g' regular_express.txt
14.找出含有数字的行
# grep -n '[0-9][0-9]*' regular_express.txt
15.找出含两个o的字符串
注:{}因为在shell里有特殊意义,所以需要加跳脱符\来让其失去意义
# grep -n 'o\{2\}' regular_express.txt
# grep -n 'go\{2,5\}g' regular_express.txt
# grep -n 'go\{2,\}g' regular_express.txt
sed:
插入:
1.将/etc/passwd 的内容列出并打印行号,同时,将2-5行删除显示
# nl /etc/passwd | sed '2,5d'
# nl /etc/passwd | sed '2d'
# nl /etc/passwd | sed '3,$d'
2.在第二行后加上一行test
# nl /etc/passwd | sed '2a test'
# nl /etc/passwd | sed '2i test'
# nl /etc/passwd | sed '2a test \ > test'
替换行:
3.将2-5行内容取代为 No 2-5 number
# nl /etc/passwd | sed '2,5c No 2-5 number'
4 列出/etc/passwd 内第5-7行
# nl /etc/passwd |sed -n '5,7p'
替换字符串:
sed 's/被替换字符串/新字符串/g'
1.获取本机IP的行
# /sbin/ifconfig eth0 |grep 'inet addr'
# /sbin/ifconfig eth0 |grep 'inet addr'| sed 's/^.*addr://g'
# /sbin/ifconfig eth0 |grep 'inet addr'| sed 's/^.*addr://g'| sed 's/Bcast:.*$//g' ------------------- 192.168.100.74 -------------------
2.用grep将关键词MAN所在行取出来
# cat /etc/man.config |grep 'MAN'
# cat /etc/man.config |grep 'MAN'| sed 's/^#.*$//g'
# cat /etc/man.config |grep 'MAN'| sed 's/^#.*$//g'| sed '/^$/d'
3.利用sed将regular_express.txt内每一行若为.的换成!
注:-i参数会直接修改文本,而并非直接输出
# sed -i 's/.*\.$/\!/g' regular_express.txt
4.利用sed在文本最后一行加入 #This is a test
注: $代表最后一行 a代表行后添加
# sed -i '$a #This is a test' regular_express.txt
# sed -i '6,6c SELINUX=disabled' /etc/selinux/config
# grep -v '^$' regular_express.txt |grep -v '^#'
# egrep -v '^$'|'^#' regular_express.txt
1. +表示重复一个或一个以上的前一个RE字符
例如:egrep -n 'go+d' regular_express.txt
普通写法: grep -n 'goo*d' regular_express.txt
2. ?表示重复零个或一个前一个RE字符
例如: egrep -n 'go?d' regular_express.txt
3. |表示用或的方式找出数个字符串
例如: egrep -n 'gd|good' regular_express.txt
4. ()表示找出群组字符串
例如: egrep -n 'g(la|oo)d' regular_express.txt
也就是搜寻(glad)或good这两个字符串
5. ()+多个重复群组判别
例如: echo 'AxyzxyzxyzxyzC'|egrep 'A(xyz)+C'
也就是要找开头是A结尾是C 中间有一个以上的'xyz'字符串的意思
awk:
1.用last取出登陆数据前五行
# last -n 5
# last -n 5 |awk '{print $1 "\t" $3}'
# last -n 5 |awk '{print $1 "\t lines:" NR "\t columes:" NF}'
2.在/etc/passwd中以:来作为分段字符,则我们要查阅第三栏小于10以下的数据,并只列出账号与第三栏
# cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t \t"$3}'
# cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t \t"$3}'
df:
比较两个文件的差异:
# diff /etc/rc3.d/ /etc/rc5.d/ ------------------- Only in /etc/rc3.d/: K30spice-vdagentd Only in /etc/rc5.d/: S70spice-vdagentd -------------------
实例:
1。统计TCP连接状态
# netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' /^tcp/
PS:关于正则,本站还提供了2款非常简便实用的正则表达式在线工具供大家参考使用:
JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:http://tools.jb51.net/regex/create_reg
本文向大家介绍shell脚本之正则表达式、grep、sed、awk,包括了shell脚本之正则表达式、grep、sed、awk的使用技巧和注意事项,需要的朋友参考一下 --正则-- 基础正则 ^word ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$ ##搜索以word结尾的 vi/vim中 $ 一行的结尾 ^$ ##表示空行 .
本文向大家介绍Shell正则表达式学习笔记,包括了Shell正则表达式学习笔记的使用技巧和注意事项,需要的朋友参考一下 正规表示法(或称为常规表示法)是透过一些特殊字符的排列,用以搜寻/取代/删除一列或多列文字字符串, 简单的说,正规表示法就是用在字符串的处理上面的一项『表示式』。正规表示法并不是一个工具程序, 而是一个字符串处理的标准依据,如果您想要以正规表示法的方式处理字符串,就得要使用支持正
1. Shell 正则表达式概述 1.1 正则表达式是什么 正则表达式 (regular expression)是一些具体有特殊含义的符号,组合在一起的共同描述字符或字符串的方法,通俗来讲正则为描述同一类事物的规则,例如我们生活中描述可以飞行的是事物,则满足这条规则的可以是鸟,蝴蝶,也可以是飞机等。 在 Linux 系统中,正则表达式通常用来对字符或字符串来进行处理,它是用于描述字符排列或匹配模式
问题内容: 无论如何,您可以像Java正则表达式模式/匹配/组一样使用sed做正则表达式匹配组吗? 如果我有像 我如何使用sed只是为了获得如下结果: 我想知道sed是否允许您执行类似java regex的操作,您定义的模式如下: 然后您可以将结果作为一个数组获得,例如: 问题答案: 您必须对括号进行转义才能对表达式进行分组: 并与使用它们,等等。 编辑 :还请注意,在此之前不匹配。括号内是文字。
本文向大家介绍linux grep正则表达式与grep用法详解,包括了linux grep正则表达式与grep用法详解的使用技巧和注意事项,需要的朋友参考一下 需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理。本文以grep为例来讲解正则表达式。 grep命令 功能:输入文件的每一行中查找字
本文向大家介绍JavaScript 正则表达式(笔记),包括了JavaScript 正则表达式(笔记)的使用技巧和注意事项,需要的朋友参考一下 一 什么是正则表达式 // 正则表达式(regular expression)是一个描述字符模式的对象; // JS定义RegExp类表示正则表达式; // String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数; 二 创