一、grep用法

**************************************

++++++用一些特殊的函数来处理参数++++++

*$# 传递给函数的参数个数

*$* 显示所有传递给函数的参数

*$@ 与$*相同但略有不同

*$? 函数的返回值

**************************************

1、grep一般格式

grep [选项] 基本正则表达式 [文件]

2、双引号引用

在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”

3、grep选项

常用的grep选项有:

*************************************************

-c    只输出匹配行的计数。

-i    不区分大小写(只适用于单字符)。

-h    查询多文件时不显示文件名。

-l    查询多文件时只输出包含匹配字符的文件名。

-n    显示匹配行及行号。

-s    不显示不存在或无匹配文本的错误信息。

-v    显示不包含匹配文本的所有行。

*************************************************

4、查询多个文件

在当前目录下所有.doc文件中查找字符串“sort”

grep “sort”* .doc

5、行匹配

grep -c “48” txt

显示满足匹配模式的所有行行数:

grep -n "48" txt

6、精确匹配

grep “48<tab>” txt

grep “48\>” txt

7、不匹配行首

如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始

grep ‘^[^48]’ txt

9、使用grep匹配“与”或者“或”模式

grep命令加- E参数,这一扩展允许使用扩展模式匹配

例如,要抽取城市代码为 219或216,方法如下:

grep -E “219|216” txt

10、空行

grep    '^$'  txt

grep -v  '^$'  非空行

11、目录

如果要查询目录列表中的目录,方法如下:

ls -l | grep '^d'

如果在一个目录中查询不包含目录的所有文件,方法如下:

ls -l | grep '^[^d]'

要查询其他用户和其他用户组成员有可执行权限的目录集合,方法如下:

ls -l | grep '^d......x..x'

在 grep命令中使用- v选项可丢弃ps命令中的grep进程。

ps ax | grep named | grep -v "grep"

二、awk用法

1、调用awk

有三种方式调用a w k,第一种是命令行方式,如:

awk [-F filed-separator] 'commands' inputs-file(s)

这里,commands是真正的awk命令。本章将经常使用这种方法。

上面例子中, [ - F域分隔符]是可选的,因为 a w k使用空格作为缺省的域分隔符,因此如果

要浏览域间有空格的文本,不必指定这个选项,但如果要浏览诸如 passwd文件,此文件各域

以冒号作为分隔符,则必须指明 - F选项,如:

awk -F:'command' input-file

第二种方法是将所有 a w k命令插入一个文件,并使 a w k程序可执行,然后用 a w k命令解释

器作为脚本的首行,以便通过键入脚本名称来调用它。

第三种方式是将所有的 awk命令插入一个单独文件,然后调用:

awk -f awk-script input-files

- f选项指明在文件 awk_script_file中的awk脚本,input_file(s)是使用awk进行浏览的文件名。

2、awk脚本

在命令中调用awk时,awk脚本由各种操作和模式组成。

如果设置了 - F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域,但

如果未设置- F选项,awk假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现

时,awk命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件

尾或文件不再存在。

3、模式和动作

任何a w k语句都由模式和动作组成。在一个 awk脚本中可能有许多语句。模式部分决定动

作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保

持执行状态。

模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段 BEGIN和

END。使用BEGIN语句设置计数和打印头。 BEGIN语句使用在任何文本浏览动作之前,之后

文本浏览动作依据输入文件开始执行。 END语句用来在 awk完成文本浏览动作后打印输出文

本总数和结尾状态标志。如果不特别指明模式, awk总是匹配或打印行数。

实际动作在大括号{ }内指明。动作大多数用来打印,但是还有些更长的代码诸如 if和循环

(looping)语句及循环退出结构。如果不指明采取动作, awk将打印出所有浏览出来的记录

4、域和记录

awk执行时,其浏览域标记为 $1,$2...$n。这种方法称为域标识。使用这些域标识将更容

易对域进行进一步处理。

使用$1,$3表示参照第1和第3域,注意这里用逗号做域分隔。如果希望打印一个有 5个域

的记录的所有域,不必指明 $1,$2,$3,$4,$5,可使用 $0,意即所有域。 Awk浏览时,到达一新

行,即假定到达包含域的记录末尾,然后执行新记录下一行的读动作,并重新设置域分隔。

注意执行时不要混淆符号 $和shell提示符$,它们是不同的。

为打印一个域或所有域,使用 print命令。这是一个awk动作(动作语法用圆括号括起来)

awk ‘{print $0}’ txt > wow (重定向)

awk ‘{print $0}’ txt tee hello.txt (输出到屏幕并且重定向到文件)

awk ‘{print $1, $4}’ txt(不要忘了加逗号以分割域)

5、打印报告头部

上述命令输出在名字和腰带级别之间用一些空格使之更容易划分,也可以在域间使用 tab

键加以划分。为加入 tab键,使用tab键速记引用符\t,后面将对速记引用加以详细讨论。也可

以为输出文本加入信息头。本例中加入 name和belt及下划线。下划线使用 \n,强迫启动新行,

并在\n下一行启动打印文本操作。打印信息头放置在 BEGIN模式部分,因为打印信息头被界

定为一个动作,必须用大括号括起来。在 awk查看第一条记录前,信息头被打印。

awk 'BEGIN {print "name   Belt\n--------------------------------"}

{print $1"\t"$4}' txt

6、打印信息尾

awk ‘BEGIN {print “Name\n-------”} {print $1} END {“end-of-report”}’

7、匹配

为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用 if语句。a w k

中if后面的条件用()括起来。

awk ‘{if($4~/Brown/)print $0}’ txt

awk  ‘$0~ /Brown/’ txt

两条命令效果相同

8、精确匹配

为精确匹配,使用等号 ==,并用单引号括起条件

awk ‘$3=="48" {print $0}’ txt

不匹配

awk '$3 != "48" {print $0}' txt

awk  ‘$0!~ /Brown/’ txt

9、或关系匹配

为抽取级别为yellow或brown的记录,使用竖线符 |。意为匹配 | 两边模式之一。注意,使

用竖线符时,语句必须用圆括号括起来

awk ‘$0~/(yellow|brown)/’ txt

复合模式或复合操作符用于形成复杂的逻辑操作,复杂程度取决于编程者本人。有必要

了解的是,复合表达式即为模式间通过使用下述各表达式互相结合起来的表达式:

&&   AND : 语句两边必须同时匹配为真。

||   O R:语句两边同时或其中一边匹配为真。

!   非 求逆

10. AND

打印记录,使其名字为‘ P.Bunny且级别为 Yellow,使用表达式 ($1 == " P.Bunny " && $4 == " Yellow "),意为& &两边匹配均为真。完整命令如下

awk ‘{if ($1=="p.bunny" && $4=="Yellow")print $0}’ txt

三、sed用法

*************************************************

p  打印匹配行

=  显示文件行号

a \  在定位行号后附加新文本信息

i \  在定位行号后插入新文本信息

d  删除定位行

c \  用新文本替换定位文本

s  使用替换模式替换相应模式

r  从另一个文件中读文本

w  写文本到一个文件

q  第一个模式匹配完成后推出或立即推出

l  显示与八进制ASCII代码等价的控制字符

{ }  在定位行执行的命令组

n  从另一个文件中读文本下一行,并附加在下一行

g  将模式2粘贴到/pattern n/

y  传送字符

n  延续到下一输入行;允许跨行的模式匹配语句

***************************************************

1、打印范围

sed -n  '2p' txt 显示第二行

sed -n ‘1,3p’ txt 显示打印1到三行

2、打印模式

假定要匹配单词Neave,并打印此行,方法如下。使用模式/pattern/格式,这里为/Neave/。

sed -n ‘/Neave/'p txt

sed -n ‘/the/'p txt

3、使用模式和行号进行查询

sed -n '4,/The/'p txt 查找第四行the

sed -n ‘6,/hello/’p txt

4、匹配元字符

匹配元字符必须使用反斜线\疲敝其特殊协议 格式为/\$/p

sed -n '/\$/'p txt

5、显示整个文件

sed -n ‘1,$p’ txt

6、任意字符

匹配任意字母,后跟任意字母的 0次或多次重复,并以ing结尾,模式为/.*ing/

sed -n '/.*ing'p txt

7、打印行号

要打印行号,使用等号 =。打印模式匹配的行号,使用格式 /pattern/=。

如果只打印行号及匹配行,必须使用两个 sed命令,并使用 e选项。第一个命令打印模式

匹配行,第二个使用=选项打印行号,格式为 sed -n -e /pattern/p -e /pattern/=

sed -n -e ‘/music/p’-e ‘/music/=’txt

8、删除文本

sed删除文本格式:

[address [,address]]d

地址可以是行的范围或模式,让我们看几个例子。

删除第一行;1d意为删除第一行

sed ‘1d’ txt

删除第一到第三行:

sed ‘1,3d’ txt

删除最后一行

sed ‘$d’ txt

也可以使用正则表达式进行删除操作。下面的例子删除包含文本‘Neave’的行。

sed ‘/Neave/d’ txt

9、替换文本

替换命令用替换模式替换指定模式,格式为:

[ address [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]

*******************************************************************************

s 选项通知 sed这是一个替换操作,并查询 pattern-to-find,成功后用replacement-pattern替换它。替换选项如下:

g    缺省情况下只替换第一次出现模式,使用 g选项替换全局所有出现模式。

p    缺省sed将所有被替换行写入标准输出,加 p选项将使 - n选项无效。 - n选项不打印输出结果。

w    文件名 使用此选项将输出定向到一个文件。

*******************************************************************************

sed ‘s/night/NIGHT’txt  night替换为NIGHT

要从$90中删除$符号,在replacement-pattern部分不写任何东西,保留空白

sed ‘s/\$//’txt

要进行全局替换,即替换所有出现模式,只需在命令后加 g选项

将所有The替换成Wow!

sed ‘s/The/Wow!/g’ txt

10、使用替换修改字符串

如果要附加或修改一个字符串,可以使用( &)命令,&命令保存发现模式以便重新调用

它,然后把它放在替换字符串里面。这里给出一个修改的设计思路。先给出一个被替换模式,

然后是一个准备附加在第一个模式后的另一个模式,并且后面带有 &,这样修改模式将放在

匹配模式之前。例如, sed语句s/nurse/"Hello"&/p 的结果如下:

sed -n ‘s/nurse/"hello" &/p’ txt

sed -n ‘s/played/hello wolrd &p’ txt

用一个空格替换所有的( # #)符号。

sed 's/##*//g' txt

删除所有行首的0,使用^符号表示模式从行首开始,^0*表示行首任意个0,

模式s/^0*//g设置替换部分为空,即为删除模式,正是要求所在

sed 's/^0*//g' txt

11、快速一行命令

******************************************************************

下面是一些一行命令集。([ ]表示空格,[ ]表示t a b键)

‘s/\.$//g’  删除以句点结尾行

‘-e/abcd/d’  删除包含a b c d的行

‘s/[ ][ ][ ]*/[ ]/g’  删除一个以上空格,用一个空格代替

‘s/^[ ][ ]*//g’  删除行首空格

‘s/\.[ ][ ]*/[ ]/g’  删除句点后跟两个或更多空格,代之以一个空格

‘/^$/d’ 删除空行

‘s/^.//g’  删除第一个字符

‘s/COL\(...\)//g’ 删除紧跟C O L的后三个字母

‘s/^\///g’  从路径中删除第一个 \

‘s/[ ]/[ ]//g’  删除所有空格并用t a b键替代

‘S/^[ ]//g’  删除行首所有 t a b键

‘s/[ ]*//g’  删除所有t a b键

********************************************************************

为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下

操作:

1) 使用s / - * / / g删除横线- - - - - -。

2) 使用/ ^ $ / d删除空行。

3) 使用$ d删除最后一行

4) 使用1 d删除第一行。

5) 使用awk {print $1}打印第一列。

命令如下,这里使用了cat,并管道传送结果到sed命令

cat txt|sed 's/--*//g'| sed '/^$/d' | sed '$d' | sed '1d' | awk '{print $1}'

shell 常用命令语法简介的更多相关文章

  1. (转)Hbase shell 常用命令(1)

    Hbase shell 常用命令(1) link:http://blog.csdn.net/scutshuxue/article/details/6988348 下面我们看看HBase Shell的一 ...

  2. Shell 常用命令总结

      Shell常用命令总结 1  ls命令:列出文件 ls -la 列出当前目录下的所有文件和文件夹 ls a* 列出当前目录下所有以a字母开头的文件 ls -l *.txt 列出当前目录下所有后缀名 ...

  3. grep的常用命令语法

    grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:"m y s t r i n g".这样做有两个原因,一是 ...

  4. shell常用命令归类整理

    shell 命令整理     bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...

  5. sqlite3常用命令&语法

    sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常不错的嵌入式数据库,SQLite大量的被用于手机,PDA,MP3播放器以及机顶盒设备.    Mozilla Firefox使用SQLit ...

  6. hbase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  7. 【转载】HBase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  8. linux shell 常用基本语法

    转自网络,真正来源不详.... 一. Linux基本命令 1.1.  cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或 ...

  9. (三)Linux Shell编程——Shell常用命令(输出、判断、循环、函数、包含)

    3. 常用命令 3.1 输出 3.1.1 echo命令 echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.命令格式: echo arg name="coding" ...

随机推荐

  1. 新IO建立的聊天程序

    服务端: package com.net.scday3; import java.io.IOException; import java.net.InetSocketAddress; import j ...

  2. android SurfaceView绘制实现原理解析

    在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面.由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独 ...

  3. 给大家推荐一个python的学习网站 http://www.codecademy.com

    注册之后,可以跟着指导,自己编码学习,比较方面: 再推荐一个在线编译的代码网站,c/c++ python  都可以: http://codepad.org

  4. LeetCode(24)-Balanced Binary Tree

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  5. JAVA加密技术-----MD5 与SHA 加密

    关于JAVA的加密技术有很多很多,这里只介绍加密技术的两种 MD5与 SHA. MD5与SHA是单向加密算法,也就是说加密后不能解密. MD5 ---信息摘要算法,广泛用于加密与解密技术,常用于文件校 ...

  6. Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能

    博客描述:后台返回地点的经纬度在地图上进行描点,点击导航弹出PopupWindow进行选择地图操作,如果手机中没有安装地图,提示没有,否则传值调起地图进行导航操作 看一下实现的效果,没图说再多都白搭 ...

  7. Oracle12c(12.1)中性能优化&amp;功能增强之通过参数THREADED_EXECTION使用多线程模型

    1.   后台 UNIX/Linux系统上,oracle用多进程模型.例如:linux上一个常规安装的数据库会有如下进程列: $ ps -ef | grep [o]ra_ oracle  15356  ...

  8. 二叉树的建立以及遍历的多种实现(python版)

    二叉树是很重要的数据结构,在面试还是日常开发中都是很重要的角色. 首先是建立树的过程,对比C或是C++的实现来讲,其涉及到了较为复杂的指针操作,但是在面向对象的语言中,就不需要考虑指针, 内存等.首先 ...

  9. 操作json数据

    删除: delete json[key] 把json字符串转成jsonObject : eval(+'('+json+')'+) 把jsonObject 转换成json字符串 :json.toJSON ...

  10. AVL树之 Java的实现

    AVL树的介绍 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. 上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1:而右边的不 ...