linux

来源:互联网 发布:mac最好的输入法 编辑:程序博客网 时间:2024/05/22 07:25

在编写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。  =  打印当前行号码。  #  把注释扩展到下一个换行符以前。