Grep命令 :
使用基本的正则表达式定义的模式来过滤文本的命令. 用于文件的检所,需要 Global Research
根据模式进行文本行(有部分匹配就可以)搜素,并将符合模式的文本行显示出来. 模式:pattern
:有文本字符和正则表达式的元 字符组合而成的匹配条件; -i
:表示忽略字符大小写;--color
:使用高亮颜色进行显示.可以通过这个定义别名机制 alias grep=‘ grep --color’
;-v
:进行反向查找, 未匹配的行进行显示;-o
:只显示被模式匹配的字符串;-E
:使用扩展的正则表达式;-A #
:显示匹配到的以及下几行;-B #
:表示前面的几行;-C #
:表示上下几行;-n
:表示显示匹配到的行号;-f
:表示模式按照文件里面的行进行匹配;-x
:表示按照行进行匹配;-c
:表示用于统计出现的次数;-w
:默认是进行行匹配的,通过-w
表示进行word
的匹配; 正则表达式 :
原则之一:尽可能长的进行文件的匹配; 元字符:
.
:匹配任意单个字符;*
:表示匹配前面的字符任意次;.*
:表示任意长度的任意字符;?
: 匹配前面的字符一次或者0
次,在使用时,需要使用\?
进行转义;\{m,n\}
:表示匹配前面的字符至少m
次,最多n
次,这里需要使用{}
进行转义,否则会被bash
解释,而不是交给grep
解释;[]
:表示匹配指定范围内的单个字符;[^]
:表示匹配指定范围之外的单个字符; 字符集和 :
[:digit:]
:表示数字;[:lower:]
:表示小写字母;[:upper:]
:表示大写字母;[:space:]
:表示空白字符;[:alpha:]
:表示字母;[:alnum:]
:表示字母和数字的组合; 位置铆定 :
^
:之后的模式必须出现在行首;$
:此字符前面的内容必须出现在行尾;^$
:表示空白行;\<
:其后面的任意字符必须作为单词的首部出现;\>
:其前面的字符必须作为单词的尾部出现.也可以使用\b 进行替换, 写在前面或者后面; 分组 \(\)
:()
里面的内容作为一个整体出现,例如:\(ab\)*
:表示ab
是一个整体,可以出现任意次;后向引用:
\1
:引用第一个左括号以及与之对应的的右括号所包括的所有内容\num
:\1:引用第num
个左括号以及与之对应的的右括号所包括的所有内容,使其作为一个整体出现; 扩展的正则表达式 字符匹配的含义和上面是相同的; 次数匹配+
:表示匹配其前面的字符至少一次; {m,n}
:是不需要进行转义的;位置铆钉字符的含义都是相同的; 分组的含义也是相同的; |
:表示的是or
的含义;Grep -E
:表示使用的是扩展的正则表达式;fgrep
:表示用于进行快速搜索,不支持正则表达式;shell编程的基础知识 编程语言:机器语言,汇编语言,高级语言:静态语言:编译型语言,强类型的语言(变 量); 关键字:被转换成机器可执行的控制指令.在执行之前就需要进行转换. C 语言, C++、JAVA、C#; 动态语言:一边解释,一边执行.PHP
、SHELL
、python
、perl
,需要解释器,解释器由静态语言开发. Lua
语言 python
语言. 面向对象:用于开发大型应用程序. JAVA python C++ perl
; 面向过程:着眼于问题的结局本身; shell
抑或:操作数相同为假,不同则为真. shell
是弱类型编程语言. 不需要声明,甚至不需要区分类型.;强类型语言:变量在使用前一定要声明,甚至初始化, bash
的变量类型:
环境变量:在bash
里面声明的变量,只能在该变量的进程环境中使用,不同 shell
中的变量不能传递使用; 引用变量${变量名} {}
通常可以省略,例如:There are some ${变量}
,如果使用的是双引号,就会替换${变量}
,如果使用的是单引号,就不会进行替换;作用域为当前 shell
进程及其子进程,export varname=value
或者: varname=value
,export varname
,作用域为当前 shell
以及其子 shell
; 本地变量(局部变量):本地变量使用 VARNANE=VALUE
进行初始化 局部变量:使用 local 变量名=VALUE
指定当前代码段有效,作用域为当前 shell
; 位置变量: $1,$2,$3.......,
脚本的第一个、第二个、第三个参数等等,通常来说脚本在执行时,可以传递参数,通过上面的方式来引用各个不同的参数; 特殊变量:(系统变量):
$?
:保存上一个命令执行状态返回值;程序执行是有两类返回值:一类是执行结果,另一类是执行状态返回代码(0-255);0 表示正确,1-255:表示错误执行. 1,2,127,系统进行预留的.$#
:表示参数的个数;$*
:参数列表;$@
:表示参数列表 脚本在执行时会启动一个子 shell
进程.:命令行启动的脚本汇集成环境变量,系统自动执行的脚本(非命令行启动)就需要各环境变量. 撤销变量: unset varname
,unset $varname
撤销变量值.可以使用 set
查看当前 shell
中的环境变量和本地变量,使用printenv, env, export
查看当前 shell
中的环境变量. 变量赋予多个值:ANIMALS=pig ANIMALS=4ANIMALS:goat
,多个变量之间使用:隔开就了.shell
中的变量值都是字符串 ,不能直接进行算数运算; printenv
:print all or part of environment
,通常是用于输出指定的环境变量,如果没有指定,就输出所有的环境变量;env
:用于在修改后的环境变量中运行一个程序,用于在环境变量中设置键值对,然后运行,感觉类似于宏;export
:多用于设置一个环境变量;set
查看环境变量的结果 脚本 命令的堆砌,按实际需要结合命令流程控制机制实现的.脚本需要通过解释器来进行解释,#!/bin/bash
其实是脚本解释器的路径,将文件的ASICII
码文件交给解释器进行分析;
条件判断:通过$?
得到上一个命令执行的返回值;
整数测试
-eq
:测试两个数是否相等 为真返回值是 0
否则为任意值;-ne
:测试两个整数不相等;-gt
:测试第一个数大于第二个数;-lt
:测试第一个数是否小于第二个数;-ge
:大于或者等于;-le
:小于或者等于; 字符测试:
字符测试的格式:[ expression ]
,或者[[expression ]]
或者test expression
; 逻辑关系:
&&
:第一个条件为假时,第二个不进行判断 ,最终结果为假,第一个条件为真时,第二个条件一定会判断;例如id user1 &> /dev/null && echo “hello ,word!”
;||
:前面为真,后面不执行,前面为假,后面执行;! id user 6 && useradd user6
或者id user6 || useradd user6
;
如果用户不存在就添加,并且 给 密 码 , 否 则 就 显 示 已 经 存 在,! id username && useradd username && echo “username” | passwd –stdin username || echo “username exxists.”
; 判断语句: 单分支 if 结构:
if 判断条件 ; then
statement1 statement2
statement3
fi
if 判 断条 件; then
statement1
statement2
statement4
else
statement1
statement2
fi
Linux
中:0
为真,其他都为假. 脚本执行需要退出时使用 exit
命令结束进程;
shell
中的运算符号:
算术运算表达式 : let c=$A+$B
; 算术表达式: C=$[$A+$B]
; expr 算术表达式
:表达式中各操作数,以及运算符之间要有空格,而且要使用命令引用:‘C=expr $A + $B
’; 文件测试:
-e
:测试文件是否存在;-f
:测试文件是否是普通文件;-d
:测试指定文件是否是目录的;-r
:测试目标文件对当前用户是否可读;-w
:测试目标文件对当前用户是否有 写的权限;-x
:测试目录文件是否对当前用户有执行的权限; 测试格式如上上所述 使用bash –n
脚本 filename
查看脚本是否有错误;bash –x
分布执行脚本,有利于发现脚本中的错误. 如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即作为脚本的推出状态码; sed
:
数据流编辑器,sed: Stream Editor
行文本编辑器,进行逐行读取,再内存中按照模式进行编辑,这段内存空间称为 sed
模式空间,处理的是从源文件读取到内存中的副本进行处理,在返回输出到屏幕,处理结束后,默处理运作:默认为显示认将模式空间中的内容显示出来,默认是不会编辑源文件的 选项:
-n
:表示静默显示,不将模式空间中的文本进行显示;-i
:直接修改源文件-e SCRIPT -e SCRIPT2
:可以同时执行多个脚本;-f /PATH/TO/SED_SCRIPT
:例如sed –f /path/to/sed_script file
;-r
:使用扩展正则表达式; sed
使用格式: sed [options] ‘Address Command’ file ........
:
Address
表示方法:
1、Startline, Endline
比如: 1, 100
; $
;表示最后一行,可以有$-1
这种用法; 2、 /PegExp/
: 要使用正则表达式 例如: /^root/
3、/pattern1/,/pattern2/
: 表示第一次被 pattern1
匹配到的行开始到第一次被pattern2
匹配的行结束,这中间所有的行; 4、LineNumber
表示指定的行; 5、StartLine, +N
;表示从指定的 StartLine 开始,向后的 N 行; COMMAND
:
d
:删除符合条件的行;
sed ‘1,2d’ /filename
:删除1,2
行;sed ‘3.$d’ /filename
:删除第三行到最后一行;sed ‘1,+2’ /filename
:表示删除向后的几行;sed ‘/oot/d’/filename
:删除包含oot
的行;sed ‘/^\//d’ /filename
:删除以/开头的行;sed '/^$/d' test.txt
:删除空白行; p
:显示符合条件的行: sed -n ‘/^\//p’ /filename
:显示\
开头的行,否则符合条件的会显示两遍;a \string
: 在 指 定 的 行 后 面 追 加 新 行 内 容 为 string
;sed ‘/^\//a\# hello word’/filename
在以/
开头的文件后面追加 # hello word
一行;i \string
:在指定的行前面添加新行,内容为 string
,用法与 a
相同;r /filename
:表示将指定文件的内容添加到符合条件的行处; sed ‘2r /filename‘ /filename1
表示将文件 1
中的内容添加到 filename
中的第 2
行处 sed ‘1,2r/filename ‘ /filename1
添加到 1, 2
行后面 sed ‘$r /filename ‘ /filename1
添加到最后一行;w file
: 将地址指定范围内的内容,另存至指定的文件中;sed ‘ /oot/w /filename ‘ /filename
; 查找并且替换:s/pattern/string/修饰符
:查找并且替换 默认只替换每一行中第一次被模式配得到的字符串 sed ‘s/oot/OOT/ ‘ /filename sed ‘s/^\///#/’ /filrname
;
修饰符号:
g
:全局替换;i
:查找是忽略字符大小写;s///
:后面的///可以统一替换为###
等三个一样的符号,避免使用字符转义,例如:sed‘s@/@#@g’ /filename
;这里可以使用后向引用;
sed ‘s#\(1..e\)#&\1r#g ‘ /filename
; &
:表示模式匹配到整个字符串;有时候是只能够使用后向引用的sed ‘s#l\(..e\)#L\1#g’ /filename
;history | sed 's#^[[:space:]]*##g' | cut -d ' ' -f1
;删除全文的空白字符:history | sed ‘ s#[[:space:]]##g’
; 删除行首的空白字符:history | sed ‘s#^[[:space:]]+##g’ | cut –d ‘ ‘ –f1
; 字符串测试:
==
:用来比较两个字符串是否相等,相等为真,不等为假;例如[[ “$变量名” == “$变量名” ]], [ $变量名 = $变量名 ]
!=
:用法如上,不等于测试,不等为真,相等为假,同样用法的包括>: < >= <=
;-n /string
:测试指定的字符串是否为空, 空则为真,不空则为假;-s /string
:测定指定的字符串是否不为空,不空为真,空则为假;