shell正则表达式

正则定义

规定一些特殊语法表示字符类,数量限定符,位置关系,然后用这些特殊语法和普通字符一起表示亿额模式,这就是正则表达式

正则三要素

字符类
数量限定符
位置限定符

正则中使用单引号保证内部字符不被shell解释掉

字符类

.  匹配任意一个字符
[] 匹配括号中的任意一个字符
-  在[]中表示字符范围
^ 位于[]内的开头,表示匹配除了括号中字符外的任意一个字符
[[:xxx:]] grep工具预定义的一些命名字符类 eg alpha字  digit 数字

数量限定符

?前边字符0-1次
+前边字符1-多次
*前边字符0-多次
{n}前边单元N次.匹配满足就返回,也可能后边重复多余N次
{n,}至少n次
{m,n}m到n次,也可能多余n次..可以增加$结尾限制

位置限定符

^匹配行首位置
$行尾位置
\<匹配单词开头位置
\>匹配单词结尾位置
\b匹配单词开始或者结尾位置
\B匹配非单词开头和结尾的位置

其他特殊字符

\ 转义
()将整个正则表达式组成一个单元,使用数量限定符
| 连接两个子表达式,表示或的关系

注:以上为grep正则表达式的extended规范,base也有,但是字符?+{}\()解释为普通字符,要表示上述含义需要加\转义.-E同理

sed

基本概念:sed是一种流式编辑器(stream idter)

基本格式

sed option -f scriptfile file1 file2
sed option 'script' file1 file2

sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文 件然后用-f参数指定,编辑命令的格式为

/pattern/action

sed是一种在线编辑器,每次处理一行内容.每次处理将当前行放入缓存"模式空间",模式空间处理完成后移动到屏幕

格式

1. /pattern/p :打印匹配pattern的行    P(print)  sed -n  '111' log  相当于grep,默认会打印一遍原文以及匹配项
2. /pattern/d :删除匹配pattern的行    D(delete)
3. /pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
4. /pattern/s/pattern1/pattern2/g:查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2
eg:  sed   '/^t/s/Z/--&--/g'   log
将log文件中所有的t字符开始的(正则狮)行中的Z替换为--Z--,,,&符号表示匹配pattern1的字符串
sed '/^[0-9]/s/\([0-9]*\)/~\1~' log
将0-9开始的,0-9*替换为~0-9~   .因为sed默认使用basic正则,所以()需要转义,   -r使用extended
pattern2中的\1表示与pattern1的第一个括号匹配的内容.\2表示与pattern1中第二个括号匹配的内容

5.sed -i 做的修改会先修该原文
6.定址:用于据定对哪些行进行编辑.地址形式可以是数字,正则或者二者结合.如果没有定制,那么sed处理所有的行
eg
sed -n  '3p' file  打印第三行
sed -n '100,300p' fiile 打印[100,300]行
sed '/start/, /end/d' file 删除start 和end行之间的行

7.命令和选项
sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定则处理所有的输入行

命令:
a\在当前行后添加一行或者多行,多行,每行需要用"\"续行
c\用次符号厚的新闻本替换当前行的文本 .....\
i\在当前行中插入文本,......
h吧模式空间李的内容赋值到暂存缓冲区
H吧模式空间的内容追加到暂存...
g复制,覆盖缘由内容
G追加
I列出非打印字符
p打印行

q结束或退出sed
r从文件读取输入行
!对所选行意外的所有行应用名林
s替换
g行内进行全局替换
w将所选行写入文件
x交换暂存缓冲区与模式空间的内容
y将字符替换为另一个字符

选项

-e进行多项编辑
-n取消默认的输出
-f指定sed脚本的文件名

正则表达式
^行首定位
$行尾定位
. 除换行以外的单个字符
*匹配0-多个前导字符
[]任意一个
[^ ]取反
\(..\) 定义元祖标签,之后可以使用\1  \2 ... \9引用
&保存查找串以便替换中引用.
\< \>词头词尾
x\{m\} 连续m个x
...
...

awk

sed以行为单位处理文件,awk更强,还能以列伪单位处理文件.

行分割缺省换行

列分割缺省连续空格和tab.

分割符也可以自己定义

命令基本形式

awk option 'script'  file1 file2
swk option -f scriptfile file1 file2

/pattern/{actions}

如果每日有pattern部分,那么所有行都执行actions部分.

自动变量$1 $2 ... 分别表示第1列................... $0 表示整个当前行

awk有类似的print语句,还有两个特殊变量condition-BEGIN和END  
BEGIN后边的句子在整个文件之前执行一次,END之后的句子在整个文件之后执行一次

搜索 -F

awk -F: '/root/' /etc/passwd

调用方式

1命令行方式

awk[-F field-separator] 'commands' input-file(s)

commands是awk命令,[-F 域分割符]是可选的. input-file是待处理文件

2shell脚本方式

#!/bin/awk -f
BEGIN{
  count1=0;
  count2=0;
}
{
if($1<100)
   count1++;
}
else{
   count2++;
}
END{
printf("%d",count2);
}

3将所有的awk命令插入一个单独文件,然后调用:

awk -f awk-script-file input-file(s)

awk调用正则表达式

A.awk语句:

awk '/REG/{action}'

B.awk正则运算语句(~,~! 等同! ~)

C.awk内置使用正则表达式函数

gsub(Ere,Reql,[In])
sub(Ere,Reql,[In])
match(string,Ere)
split(sting,A,[Ere])

awk内置变量&&杂项

ARGC
ENVIRON
FILENAME
FNR 浏览文件的记录数
FS 等价-F
NF浏览记录的域的个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符
$0 整条记录
$1...$.. 第n个域

print
printf 和c语言printf类似

awk进阶

1循环(类C)

2条件(类C)

3数组  下标键值

CUT

在文件中负责剪贴数据,以每一行为一个处理对象

剪贴依据(三个定位方式)

字节(bytes) -b
cut -b 1-3  file      #按照字节剪贴1-3个字符

字符(characters) -c

域(fields) -f
-d指定域分割符,-f指定检出哪几个域
cut -d: -f 1-2,5 /etc/passwd


sort

按照字符ascii排序

-u去除重复行

-r将默认升序修改为降序

-o将结果重定向写入文件,可以指定到源文件

-n以数字方式排序而非码拍.

-t 设定分隔符, -k指定分割之后的列.实现第k列排序

-f忽略大小写比较

-c检查是否已排序,如果乱序,输出第一个乱序的行的相关信息.返回1

-C检查,如果未排序,返回1

-M以 月份方式排序

-b忽略空白

uniq

去除重复

-c显示输出中,在每行行首加上本行出现次数,取代-u,-d

-d只显示重复行

-u只显示不重复

tcpdump

strace

archlinux

gento

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容