shell 常用命令语法简介

一、grep用法

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

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

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

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

*[email protected] 与$*相同但略有不同

*$? 函数的返回值

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

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}‘

时间: 2024-10-18 04:14:15

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

Shell常用命令和流程控制

在shell脚本中可以使用三类命令: >>> Unix 命令 <<< 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字操作的. 常用命令语法及功能 echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l file  wc -w file  wc -c file: 计算文件行数.计算文件中的单词数.计算文件中的字符数 cp sourcefile dest

adb shell常用命令

adb shell常用命令: 按下OK键   device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP') 长按某个按键:  device.drag((236,440),(236,440),2,10) 相应的按键对应的名称如下: home键:KEYCODE_HOME back键:KEYCODE_BACK send键:KEYCODE_CALL End键:   KEYCODE_ENDCALL 上导航键:KEYCODE_DPAD_UP 下导航键:KEYCODE_D

Shell 常用命令

Shell 常用命令 这篇博客记录了一些 Shell 常用命令 供未来查阅. 添加ll 为了简化 "ls -l",可以在~/.bash_profile中加入: 1 2 alias ll='ls -l' 获得参数 $0是命令本身$1是第一个参数 $ $可以认为是 获取内容 . 内置变量 bash有很多内置变量,我们可以使用$获取到它们,例如: 1 2 3 4 5 $PWD $HOME $PATH $(pwd) 读取配置 配置数据可以像下面一样: 1 2 3 4 Fansy:UtilToo

hbase shell常用命令

hive常用命令 show tables; 列出hive里面所有数据表名 desc userProfile; 显示数据表userProfile的基本表字段及字段type desc extended trackinfo; 显示数据表trackinfo的详细信息,包括字段说明,数据表等 /usr/local/cloud/hive/bin/hive 进入hive数据库 select attribute_name from pms_attribute where attribute_id=21000 a

Shell 常用命令总结

Shell常用命令总结 1  ls命令:列出文件 ls -la 列出当前目录下的所有文件和文件夹 ls a* 列出当前目录下所有以a字母开头的文件 ls -l *.txt 列出当前目录下所有后缀名为txt的文件 2  cp命令:复制  cp a.txt b.txt : 把文件a的内容复制到b文件 cp a.txt ./test : 把文件a复制到text目录下 cp -a test test2:递归的把目录test下所有文件(包括隐藏的文件)复制到新的目录 test2 3  cat命令:查看 组

ANT编译打包&WIFI调试& adb shell常用命令

ANT编译打包 1:用ADT工具自带的打包:    1:切换到项目目录: 运行,android update project -p . android update project -p ./ --library ../com.example.plugin1.ifs 2:刷新:多了两个目录, 3:local.properties配置: sdk.dir=E:\\samy\\adt-huixin_x86-20140321\\sdk  key.store=./keystore/**** key.sto

Laravel4常用命令语法大全汇总

从去年开始,晚上没事时,使用Laravel4的写了一个简单的CMS框架,其中还是积累了不少经验,在这里分享给大家. 在simplahub社区发了一篇帖子,就叫"Laravel4常用命令语法大全汇总". 连接地址: http://www.simplahub.com/forum.php?mod=viewthread&tid=38&extra=page%3D1

Linux——note shell常用命令 cut 、sort、unqi、tee、tr、split和shell中连接符&& ||

1.cut 常用作将一个文件分段 cut -d'分隔符' [-cf] n -d 后面指定分隔符,用单引号引起来. -f 指定第几段 -c 后面只有一个数字表示截取第几个字符,后面跟一个数字区域,表示截取从几到几. [[email protected] ~]# cut -d: -f 3 /etc/passwd [[email protected] ~]# cut -d: -f 3,4 /etc/passwd [[email protected] ~]# cut -c 10 /etc/passwd

SHELL常用命令总结

http://blog.chinaunix.net/uid-25311424-id-2956521.html 一.mkdir命令 1.用途:创建目录 2.参数: (1).-p :如果路径中的某些目录不存在,则会自动创建目录,默认的mode由执行环境中的umask决定,即mode = 0777 - umask;无参数则路径中的目录不存在则将无法创建 (2).-m : 指定目录的权限; 3.例子: 示例一 [[email protected] ~]# umask 0022 [[email prote