######1.grep文本过滤明令######
全面搜索研究正则表达式并显示出来
grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 ,打印匹配到的行。
由正则表达式或者字符及基本文本字符所编写的过滤条件。
###1.grep的格式###
grep 匹配条件 处理文件
###2.grep中字符的匹配位置设定###
^ 关键字 ##以 “关键字”开头
关键字 $ ##以 “关键字”结尾
\< 关键字 ##“关键字”前没有字符
关键字 \> ##“关键字”后没有字符
\< 关键字 \> ##“关键字”前后均没有字符
grep -i ##忽略大小写
###3.grep的正则表达式###
1)grep r... file ##以r开头的任意3个字符的行
2)grep r...t file ##以r开头、t结尾的,并且中间有任意3个字符的行
3)grep ...t file ##以t结尾的,前面有3个字符的行
###4.grep 正则表达式与扩展正则表达式###
正规的 grep 不支持扩展的正则表达式,
竖线是用于表示“或”的扩展正则表达式字符,正规的 grep 无法识别
加上反斜杠,这个字符就被翻译成扩展正则表达式,就像 egrp和grep -E 一样
###5.grep 中字符的匹配次数设定###
.* ##关键字之间匹配任意字符
* ##字符出现 [0- 任意次 ]
\? ##字符出现 [0-1 次 ]
\+ ##字符出现 [1- 任意次 ]
\{n\} ##字符出现 [n 次 ]
|{m,n\} ##字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\} ##字符出现 [0-n 次 ]
\{m,\} ##字符出现 [ 至少 m 次 ]
\(xy\)\{n\}xy ##关键字出现 [n 次 ]
* ##字符出现 [0- 任意次 ]
\+ ##字符出现 [1- 任意次 ]
\{n\} ##字符出现 [n 次 ]
|{m,n\} ##字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\} ##字符出现 [0-n 次 ]
\{m,\} ##字符出现 [ 至少 m 次 ]
\? ##字符出现 [0-1 次 ]
######2.sed行编辑器######
用来操作纯 ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式间” (patternspace),可以指定仅仅处理哪些行
sed 符合模式条件的处理,不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,直到文件末尾
调用sed 命令格式:
有两种形式:
sed [options] ' command ' file(s)
sed [options] -f scriptfile file(s)
###1.p 模式操作###
sed -n '/\:/p' file ##显示以:隔开的行,不复制
sed -n '/ xxx$ /p' file ##显示以xxx结尾的行,不复制
sed -n '/ ^xxx /p' file ##显示以xxx开头的行,不复制
sed -n '2,6p' file ##显示第2行至第6行,不复制
sed -n '2,6!p' file ##显示除了第2行至第6行以外的行,不复制
sed -n '/\:/p' xxx ##显示以:隔开的行
sed -n /^#/p xxx ##显示以#开头的行
sed -n '/^#/!'p xxx ##显示除了以#开头的行
cat -b xxx ##跳过空行显示行号
cat -n xxx ##包括空行显示行号
cat -n xxx | sed -n '6p' ##显示第6行
cat -n xxx | sed -n '2,6p' ##显示第2行至第6行
cat -n xxx | sed -n -e '2p' -e '6p' ##显示第2行和第6行
cat -n xxx | sed -n -e '2p;6p' ##显示第2行和第6行
###2. d 模式操作###
sed '/^xxx/d' file ##删除以xxx开头的行,并显示
sed '/^xxx/!d' file ##删除除了以xxx开头的行之外的行,并显示
sed '/xxx $/d' file ##删除以xxx结尾的行,并显示
sed '1,4d' file ##删除第1行至第4行,并显示
sed –n '/^xxx/d' file ##删除以xxx开头的行,不显示
sed '/^xxx/d' ##删除以xxx开头的行,并显示
sed '/^xxx/!d' ##删除除了以xxx开头的行之外的行,并显示(只保留以xxx开头的行)
sed –n '/^xxx/d' ##删除以xxx开头的行,不显示
cat -n xxx | sed '4d' ##删除第4行,并查看
cat -n xxx | sed '4,6d' ##删除第4行至第6行,并查看
cat -n xxx | sed -e '4d;6d' ##删除第4行和第6行,并查看
###3.a 模式操作###
sed '/^xxx/a \hello westos' file ##添加hello westos到以xxx开头的行的下一行
sed '/^xxx/a \hello \nwestos' file ##添加[hello换行westos]到以xxx开头的行的下一行
sed 'axxx' ##添加xxx到每一行的下一行
###4. i 模式操作###
sed '/^xxx/i\hello \nwestos' file ##插入[hello换行westos]到以xxx开头的行的上一行
###5. c 模式操作###
sed '/^xxx/c\hello \nwestos' file ##用[hello换行westos]替换以xxx开头的行
###6. w 模式操作###
sed '/^xxx/w file1' file ##将以xxx开头的行导入到一个新文件中,并显示
sed -n '/^xxx/w file1' file ##将以xxx开头的行导入到一个新文件中,不显示
###7. sed的其他用法###
sed '*/xxx' file ##将xxx文件里的内容插入到每一行的下一行
sed '6r*/xxx' file ##将xxx文件里的内容插入到第6行的下一行
sed '/^xxx/=' file ##显示以xxx开头的行的行号和所有内容
sed -n '/^xxx/=' file ##显示以xxx开头的行的行号,不显示内容
sed -n -e '/^xxx/p' -e '/^xxx/=' file ##显示以xxx开头的行的行号和内容
sed -nf file2 file ##执行file2文件中的条件,不复制原文件内容
sed ' = ' file ##在文件每一行的上一行插入行号
sed ' N;s/ \ n / /g' file ##将文件中显示的行号移至每一行前面,并空格
sed 's/^xxx/***/g' file ##将文件中所有的xxx替换成***,并显示
sed -e 's/xxx/***/g;s/###/+++/g' file ##将文件中所有的xxx替换成***和###替换成+++,并显示
sed 's/ \ / / # /' file ##将文件中的 / 替换成#,只替换第一个,并显示
sed '4s/xxx/***/g' file ##将第4行的xxx替换成***,并显示全文
sed '2,4s/xxx/***/g' file ##将第2行到第4行的xxx替换成***,并显示全文
sed '/###/,/+++/s/xxx/***/g' file ##将以###开头的行至以+++开头的行中的xxx替换成***,并显示全文
sed 's/ \ / / /g' file ##将文中的所有“ \ ”换为“ ”,并显示
sed 's@/@ @g' file ##@和 / 是一个意思,为了方便区分使用
sed 's@xxx@***@g' file ##将文中的所有xxx换为***,并显示
sed 'G' file ##将文件中的每一行都空一行
sed '$!G' file ##除了最后一行后不空行外,其他的每一行都空一行
sed -n '$p' file ##显示最后一行
######3. awk报告生成器######
awk处理机制:逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作。
awk在命令格式上分别体现如下 :
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
{}: 逐行读入文本,执行相应的处理。是最常见的编辑指令块
END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果
###1.awk基本用法###
awk '{print FILENAME}' file ##将文件的所有行替换为file的名称,并显示
awk '{print "NR" }' file ##显示文中的所有行号
awk -F : '{print "NF" }' file ##显示每一行的列数
【注释】passwd7列的含义: 用户名:用户密码:uid:gid:用户描述:用户家目录:用户默认shell
awk 'BEGIN{print xxx}' file ##文件以xxx开头,并显示xxx
awk -F : '{print xxx}' file ##显示文件第1列
awk 'END{print ***}' file ##文件以***结尾,并显示***
awk -F : 'BEGIN{print xxx}{print $n}END{***}' file ##显示文件以xxx开头,第n列,以***结尾
awk '/xxx$/' file ##显示以xxx结尾的行
awk -F : '/xxx$/{print $1}' file ##显示以xxx结尾行的第1列
awk -F : '!/xxx$/{print $1}' file ##显示除了以xxx结尾行之外的所有行的第1列
awk 'BEGIN{a=34;print a+12}' ##显示34+12的结果 (计算功能)
awk -F : '/^[a-d]/{print $1}' file ##显示以a到d开头的行的第1列
awk -F : '/^a|xxx$/{print $1,$7}' file ##显示以a开头或者以xxx结尾的行的第1列到第7列
【注释】:-F : 指定以:为分割符 [ ]模糊器配 { }精确匹配 | 两个条件满足一个即可
awk -F : '$6~/xxx$/{print $1}' file ##显示第6列以xxx结尾的行的第1列
awk -F : '$6!~/xxx$/{print $1,$7}' file ##显示除了第6列以xxx结尾的行之外所有行的第1列到第7列
###2.截取ip###
######4. find命令######
find /dir/ -name xxx ##查找目录下名称为xxx的文件
find /dir/ -maxdepth 1 -name xxx ##查找目录下最大深度为1的名称为xxx的文件
find /dir/ -mindepth 2 -name xxx ##查找目录下最小深度为2的名称为xxx的文件
find /dir/ -user xxx ##查找目录下用户为xxx的文件
find /dir/ -group *** ##查找目录下组为***的文件
find /dir/ -user xxx -a -group *** ##查找目录下用户为xxx并且组为***的文件
find /dir/ -user xxx -o -group *** ##查找目录下用户为xxx或者组为***的文件
find /dir/ -user xxx -a -not -group *** ##查找目录下用户为xxx并且组不为***的文件
find /dir -size 20k ##查找目录下大小为20k的文件
find /dir -size -20k ##查找目录下大小低于20k的文件
find /dir -size +20k ##查找目录下大小高于20k的文件
find /dir -size +20k -exec rm -fr {} \; ##查找目录下大小高于20k的文件,并删除
find /dir/ -type l ##查找目录下类型为链接的文件
find /dir -ctime 10 ##查找目录下更改时间为10天的文件
find /dir -ctime -10 ##查找目录下更改时间小于10天的文件
find /dir -ctime +10 ##查找目录下更改时间大于10天的文件
find /dir -cmin 10 ##查找目录下更改时间为10min的文件
find /dir -cmin +10 ##查找目录下更改时间大于10min的文件
find /dir -cmin -10 ##查找目录下更改时间小于10min的文件
find /dir/ -perm 444 ##查找目录下权限为444的文件(同时满足u=4并且g=4并且o=4)
find /dir/ -perm -444 ##查找目录下权限大于等于444的文件(同时满足u位含有4,并且g位含有4,并且o位含有4)
find /dir/ -perm /444 ##查找目录下权限有1位为4的文件(满足1项即可,u位含有4,或者g位含有4,或者o位含有4)
find /dir/ -perm +444 ##意思与/444一样,(企业7之前的版本为+,企业7之后的版本为/)