在编写shell 脚步的时候,我们经常需要用一些命令,接下来将介绍几种在shell 脚本的编辑中经常用到的命令。
一 grep 命令
grep 命令可以过滤输出,在脚本的编辑中经常需要过滤一些输出
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。Windows系统下类似命令FINDSTR。
命令的用法
grep [OPTIONS] PATTERN [FILE...]
(只输出匹配行的计数)[OPTIONS]: -c, --count Suppress normal output; instead print a count of matching lines for each input file. With the -v, --invert-match option (see below), count non-matching lines. (-c is specified by POSIX.)
-i, 不区分大小写,只适用于单个字符
-h, 查询多文件时不显示文件名
-l, 查询多文件时只输出包含匹配字符的文件名
-n,
-n, --line-number
Prefix each line of output with the 1-based line number within
its input file. (-n is specified by POSIX.)
(显示匹配行以及行号)
-s, --no-messages
Suppress error messages about nonexistent or unreadable files.
Portability note: unlike GNU grep, 7th Edition Unix grep did not
conform to POSIX, because it lacked -q and its -s option behaved
like GNU grep's -q option. USG-style grep also lacked -q but
its -s option behaved like GNU grep. Portable shell scripts
should avoid both -q and -s and should redirect standard and
error output to /dev/null instead. (-s is specified by POSIX.)
(不显示不存在或者无匹配文本的错误信息)
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
(反向过滤,过滤掉匹配的字符,显示不匹配的字符)
-E, 多重过滤
-n2, 显示匹配的内容,以及匹配处的上下2行
-A3, 显示匹配的内容,以及下面三行
-B4, 显示匹配的内容,以及前面四行
pattern 正则表达式的主要参数
\: 忽略正则表达式中特殊字符的原有含义
^: 匹配正则表达式中的开始行
$: 匹配正则表达式中的结束行
\<: 从匹配正则表达式的行开始
\>: 从匹配正则表达式的行结束
[]: 单个字符,如[A]
[ - ]: 表示范围,如[A-Z]
. : 所有的单个字符
* : 所有字符,长度可以为0
示例:
二 diff 命令
Linux中diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。
diff [OPTION]... FILES
利用 diff 打补丁
diff -u file2 file3 > file.path file2与file3的差别导入到file.path
patch file2 file.patch 给file2打补丁,并且不备份原来的file2 文件, -b 可以备份原文件
三 cut 命令
cut在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。
-d 指定分割符号 -f 域 -b 字节 -c 字符
四 awk 命令
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源
awk 命令可以一行一行的分析处理
awk '条件类型1{动作1}条件类型2{动作2}' filename
-F 后面跟分隔符 -v 是传递变量的,由于awk 和 shell 的变量不通用,所以定义在shell 中的变量需要在awk 中传递变量的值
五 sed
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当 前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命 令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输 出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
Sed命令格式 调用sed命令有两种形式: sed [options] 'command' file(s) sed [options] -f scriptfile file(s) a 在当前行后面加入一行文本。 b label 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 c 用新的文本改变本行的文本。 d 从模板块(Pattern space)位置删除行。 D 删除模板块的第一行。 i 在当前行上面插入文本。 h 拷贝模板块的内容到内存中的缓冲区。 H 追加模板块的内容到内存中的缓冲区 g 获得内存缓冲区的内容,并替代当前模板块中的文本。 G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l 列表不能打印字符的清单。 n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 p 打印模板块的行。 P(大写) 打印模板块的第一行。 q 退出Sed。 r file 从file中读行。 t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file 写并追加模板块到file末尾。 W file 写并追加模板块的第一行到file末尾。 ! 表示后面的命令对所有没有被选定的行发生作用。 s/re/string 用string替换正则表达式re。 = 打印当前行号码。 # 把注释扩展到下一个换行符以前。