如何在智能告警平台CA触发测试告警
996
2022-10-14
Grep 高效用法实战总结 - 运维笔记
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。grep主要作用是过滤出指定的行,指定的行满足什么条件,满足的条件可配合正则表达式来表示,实现强大的文本处理。
文本处理工具分类常用的有:grep,egrep,fgrep。
三者区别grep: 在没有参数的情况下,只输出符合RE(Regular Expression)字符。egrep:等同于grep -E,和grep最大的区别就是表现在转义符上, 比如grep 做次数匹配时\{n,m\}, egrep则不需要直接{n,m}。egrep显得更方便简洁。fgrep:等同于grep -f,但是不能使用正则表达式。所有的字符匹配功能均已消失。
grep格式grep [option] pattern filename
grep的option选项说明
grep的option选项说明:--color 显示颜色的参数,即搜索出来的关键字符带有颜色。使用"grep --color 关键字符" 或者 "grep --color=auto 关键字符"。一般配置别名alias grep="grep --color"-a 不要忽略二进制数据。使用"grep -a 关键字符"-A 显示符合关键字符的行, 以及其后面的n行。使用 "grep -An 关键字符" 或者 "grep -A n 关键字符"-b 显示符合关键字符的行, 以及其前后的各n行。使用"grep -bn 关键字符", 注意这个不能使用"grep -b n 关键字符"! 跟-C参数差不多,但是会多打印出行号!!!-B 显示符合关键字符的行, 以及其前面的n行。 使用 "grep -An 关键字符" 或者 "grep -A n 关键字符"-c 只输出匹配行的计数。即只显示出匹配关键字符的那行的行数,不显示内容!使用"grep -c 关键字符"-C 显示符合关键字符的行, 以及其前后的各n行。使用 "grep -Cn 关键字符" 或者 "grep -C n 关键字符"。跟-b参数差不多,-b参数会多打印行号出来!-d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。-d后面跟的是进行的动作,一般是"grep -d read"或"grep -d recure",后面会有小示例说明。-e 指定字符串作为查找文件内容的关键字符。使用"grep -e 关键字符"。grep -e "正则表达式" 文件-E 将关键字符为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式!!通常用于满足多个条件中的其中一个条件进行搜索。使用grep -E "条件1|条件2|条件2"-f 显示两个文件中相同的行。使用 "grep -f filename1 filename2 " 或者 "grep --file filename1 filename2",相等于"cat filename1 filename2|sort|uniq -d",即取交集!-F 将关键字符视为固定字符串的列表。使用"grep -F 关键字 filename1" 或者 "grep -F 关键字符 filename1 filename2 filenamen", 会显示出来关键字所在的文件的列表。-G 将关键字符视为普通的表示法来使用。-h 对多文件搜索关键字符时不显示文件名,只显示关键字符。使用"grep -h 关键字符 filename1 filename2 filenamen", 不显示文件名,只显示关键字符。-H 对多文件搜索关键字符时显示文件名和关键字符,跟-h参数相反。 使用"grep -H 关键字符 filename1 filename2 filenamen", 显示"文件名:关键字符"。-i 忽略关键字符的大小写。(跟-y参数相同)。使用"grep -i"-l 对多文件搜索关键字符时只显示文件名。使用"grep -l 关键字符 filename1 filename2 filenamen",只显示文件名,不显示关键字符。-L 对多文件搜索关键字符时,只显示不匹配关键字符的文件名。使用"grep -L 关键字符 filename1 filename2 filenamen",只显示不匹配关键字符的文件。-n 显示匹配关键字符的行号和行内容。使用"grep -n 关键字符 filename"-q 不显示任何信息。用于if逻辑判断,安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。-R/-r 此参数的效果和指定"-d recurse"参数相同。-s 当搜索关键字符,匹配的文件不存在时不显示错误信息。即不显示不存在或无匹配文本的错误信息。 使用"grep -s 关键字符 filename"-v 反转或过滤搜索,即过滤出来那些不匹配关键字符的行。使用"grep -v 关键字符"-w 精准搜索关键字符,即只显示完全匹配关键字符的行,不显示那些包含关键字符的行。使用"grep -w 关键字符", 或者使用grep "\<关键字符\>",或者使用grep "\b关键字符\b"-x 只显示整行都是关键字符的行。使用"grep -x 关键字符"。-y 忽略关键字符的大小写。(跟-i参数相同)。"grep -y"。-o 只输出文件中匹配到的部分, 不会打印多余的内容。-P 使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。典型用法是匹配指定字符串之间的字符。(-e或-E是匹配扩展正则表达式,-P是匹配perl正则表达式)
grep正则表达式元字符集(基本集)
^匹配行的开始 如:'^grep'匹配所有以grep开头的行。 $匹配行的结束 如:'grep$'匹配所有以grep结尾的行。 .匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 *匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。 []匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。即[mn]表示匹配m或者n关键字符,相当于grep -E "m|n"。注意[]里面不要放太多关键字符,容易混乱!只要放[]里面的都是要匹配的关键字符! [^]匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母,但是包含rep并且rep不在开头(即*req)的行。 \(..\)标记匹配字符,如'\(love\)',love被标记为1。 \<匹配单词的开始,如:'\ \>匹配单词的结束,如'str\>'匹配包含以str结尾的单词的行。通常使用"\<关键字符\>"作为精准匹配,相当于grep -w x\{m\}重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。 x\{m,\}重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 \w匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \W\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b单词锁定符,如: \byang\b 表示只匹配yang。相当于grep -w "yang" 或者 grep "\
POSIX字符类 (注意使用的时候,外面要套一层中括号才能生效)为了在不同国家的字符编码中保持一致,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]文字数字字符。使用 grep [[:alnum:]] filename 表示打印filename文件中包括数字和字母(大小写字母)的行[:alpha:]文字字符。使用 grep [[:alpha:]] filename 表示打印filename文件中包括字母(大小写字母)的行。[:digit:]数字字符。使用 grep [[:digit:]] filename 表示打印filename文件中包括数字的行。[:graph:]非空字符(非空格、控制字符)[:lower:]小写字符。使用 grep [[:lower:]] filename 表示打印filename文件中包括小写字母的行。[:cntrl:]控制字符[:print:]非空字符(包括空格)[:punct:]标点符号[:space:]所有空白字符(新行,空格,制表符)。例如使用 sed -i 's/[[:space:]]//g' filename 表示删除filename文件中所有的空格。[:upper:]大写字符。 使用 grep [[:upper:]] filename 表示打印filename文件中包括大写字母的行。[:xdigit:]十六进制数字(0-9,a-f,A-F)
grep引号使用问题
单引号:即将单引号中内容原样输出,也就是单引号''是全引用。双引号: 如果双引号的内容中有命令、变量等,会先把变量、命令解析成结果,再将结果输出。双引号""是部分引用。单双引号:常量用单引号''括起,而含有变量则用双引号""括起。单双可同时出现,单扩住双。"" 号里面遇到$,\等特殊字符会进行相应的变量替换'' 号里面的所有字符都保持原样对于字符串,双引号和单引号两者相同, 匹配模式也大致相同, 但有一些区别非常容易混淆, 例如:grep "$a" file #引用变量a,查找变量a的值。双引号识别变量。grep '$a' file #查找"$a"字符串。单引号不识别变量。grep "\\" file #grep: Trailing backslash(不知原因)grep '\\' file #查找‘\’字符$ 美元符\ 反斜杠` 反引号" 双引号这四个字符在双引号中是具有特殊含义的,其他都没有,而单引号使所有字符都失去特殊含义!如果用双引号,查找一个\,就应该用四个\:grep "\\\\" file 这样就对了,这样等同于:grep '\\' file第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找;第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找;其实grep执行的是相同的命令。
grep -E 与 grep -P区别 [ 正则中的 ?= 、?<= 、?! 、?
grep -E 主要是用来支持扩展正则表达式,比如 | 符号,用于grep多条件查询,并非是使用标准正则表达式。grep -P 主要让grep使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。最典型的用法是"匹配指定字符串之间的字符"。示例如下:打印test.file文件中含有2018 或 2019 或 2020字符串的行[root@localhost ~]# grep -E "2018|2019|2020" test.file如下想在一句话"Hello,my name is kevin" 中匹配中间的一段字符串 "my name is",可以这样写正则表达式:[root@localhost ~]# echo "Hello,my name is kevin"Hello,my name is kevin[root@localhost ~]# echo "Hello,my name is kevin"|grep -P '(?<=Hello)'Hello,my name is kevin[root@localhost ~]# echo "Hello,my name is kevin"|grep -P '(?<=Hello).*(?= kevin)' Hello,my name is kevin[root@localhost ~]# echo "Hello,my name is kevin"|grep -Po '(?<=Hello).*(?= kevin)',my name is[root@localhost ~]# echo "Hello,my name is kevin"|grep -P '(?<=Hello,).*(?= kevin)' Hello,my name is kevin[root@localhost ~]# echo "Hello,my name is kevin"|grep -Po '(?<=Hello,).*(?= kevin)'my name is这里千万注意下:正则中的 ?= 、?<= 、?! 、? mtu 1500 inet 172.16.60.232 netmask 255.255.255.0 broadcast 172.16.60.255 inet6 fe80::e825:b3ff:fef6:1398 prefixlen 64 scopeid 0x20 ether ea:25:b3:f6:13:98 txqueuelen 1000 (Ethernet) RX packets 22911237 bytes 4001968461 (3.7 GiB) RX errors 0 dropped 17058008 overruns 0 frame 0 TX packets 670762 bytes 98567533 (94.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@localhost ~]# ifconfig eth0|grep -P "(?<=inet).*(?=netmask)" inet 172.16.60.232 netmask 255.255.255.0 broadcast 172.16.60.255[root@localhost ~]# ifconfig eth0|grep -Po "(?<=inet).*(?=netmask)" 172.16.60.232
grep 常用操作技巧 1)在文件中搜索一个单词,命令会返回一个包含"match_pattern"的文本行:[root@test ~]# grep match_pattern file_name2)在多个文件中查找:[root@test ~]# grep "match_pattern" file_1 file_2 file_3 ...3)输出除之外的所有行 -v 选项:[root@test ~]# grep -v "match_pattern" file_name4)标记匹配颜色 --color=auto 选项:[root@test ~]# grep "match_pattern" file_name --color=auto5)使用正则表达式 -E 选项:[root@test ~]# grep -E "[1-9]+"或[root@test ~]# egrep "[1-9]+"6) 只输出文件中匹配到的部分 -o 选项:[root@test ~]# echo this is a test line. | grep -o -E "[a-z]+\."line.[root@test ~]# echo this is a test line. | egrep -o "[a-z]+\."line.7)统计文件或者文本中包含匹配字符串的行数 -c 选项:[root@test ~]# grep -c "text" file_name8)输出包含匹配字符串的行数 -n 选项:[root@test ~]# grep "text" -n file_name或[root@test ~]# cat file_name | grep "text" -n9)多个文件[root@test ~]# grep "text" -n file_1 file_210)打印样式匹配所位于的字符或字节偏移:[root@test ~]# echo gun is not unix | grep -b -o "not"7:not#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。11)搜索多个文件并查找匹配文本在哪些文件中:[root@test ~]# grep -l "text" file1 file2 file3...
grep递归搜索文件 12)在多级目录中对文本进行递归搜索:[root@test ~]# grep "text" . -r -n.表示当前目录。13)忽略匹配样式中的字符大小写:[root@test ~]# echo "hello world" | grep -i "HELLO"hello14)选项 -e 制动多个匹配样式:[root@test ~]# echo this is a text line | grep -e "is" -e "line" -oisisline15)也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。[root@test ~]# cat patfileaaabbb[root@test ~]# echo aaa bbb ccc ddd eee | grep -f patfile -o
在grep搜索结果中包括或者排除指定文件 16)只在目录中所有的.php和.html文件中递归搜索字符"main()"[root@test ~]# grep "main()" . -r --include *.{php,html}17)在搜索结果中排除所有README文件[root@test ~]# grep "main()" . -r --exclude "README"18)在搜索结果中排除filelist文件列表里的文件[root@test ~]# grep "main()" . -r --exclude-from filelist19)使用0值字节后缀的grep与xargs:#测试文件:[root@test ~]# echo "aaa" > file1[root@test ~]# echo "bbb" > file2[root@test ~]# echo "aaa" > file3[root@test ~]# grep "aaa" file* -lZ | xargs -0 rm20)执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。"grep -q"用于if逻辑判断,特别好用!-q 参数意为安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。grep -q 静默输出:[root@test ~]# grep -q "test" filename不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于if条件测试。
如下是某个脚本中使用的"grep -q"安静模式#Deploy_Env参数有下划线则对Pkg_Env和Deploy_Env重新赋值if `echo ${Deploy_Env}|grep -q "_"`;then Pkg_Env=`echo ${Deploy_Env} | awk -F'_' '{print $2}'` Deploy_Env=`echo ${Deploy_Env} | awk -F'_' '{print $1}'`fi再如下一例[root@test ~]# if $(echo "wang_shibo"|grep -q "_");then kevin=`echo "wang_shibo"|awk -F"_" '{print $2}'`;echo ${kevin};fishibo
打印出匹配文本之前或者之后的行 21)显示匹配某个结果之后的3行,使用 -A 选项:[root@test ~]# seq 10 | grep "5" -A 3567822)显示匹配某个结果之前的3行,使用 -B 选项:[root@test ~]# seq 10 | grep "5" -B 3234523)显示匹配某个结果的前三行和后三行,使用 -C 选项:[root@test ~]# seq 10 | grep "5" -C 3234567824)如果匹配结果有多个,即多重匹配的话,中间会用"--"作为各匹配结果之间的分隔符:[root@test ~]# echo -e "a\nb\nc\na\nb\nc" | grep a -A 1ab--ab[root@test ~]# grep "match_pattern" file_name
grep取文件中每行的前两个字符/前2字节
示例:[root@localhost tmp]# cat test 00c3dd43f15eafab3b0db4bdaabb3f6d91c2f9a3b88e044ddf83393dd910eb9b fb0772b142fe0d214c0ccfa9c7b8ed13277c35e9fce75ba1c151dd878dcda95cd7c3167c320d7a820935f54cf4290890ea19567da496ecf774e8773b35d5f065131f805ec7fd68d45a887e2ef82de61de0247b4eb934ab03b7c933650e854baa322ed380e680a77f30528ba013e3a802a7b44948a0609c7d1d732dd46a9a310d6ac240b130982ad1c3ba3188abbf18ba4e54bdd9e504ce2d5c2eff6d3e86b8ddaf40529340df51a38ca319c40e6b718f5952990b335aa703967520809061f677a1bbb86f4147e007af7d3f7e987cf5ed3d33912bf430d8ab3528b1953225cca610ebb929a9def601aa26150b2dadb6eae47ad07ac399e25ace3a5c1395fb2794[root@localhost tmp]# cat /tmp/test|grep -o "^.\{0,2\}"00fbd713326aafa110
grep同时筛选多个条件
grep使用-E参数实现"满足多个条件中的任意一个",如下:1)满足任意条件(word1、word2和word3之一)将匹配。# grep -E "word1|word2|word3" file.txt grep要想实现"同时满足多个条件",需要执行多个grep过滤命令,如下:2)必须同时满足三个条件(word1、word2和word3)才匹配。# grep word1 file.txt | grep word2 |grep word3# cat file.txt|grep word1 | grep word2 |grep word3 简单总结下grep常用过滤命令:过滤的内容可以是一个词组等, 需要用引号包裹1)获取文件中的关键字key: # cat fileName | grep "key" #即获取fileName文件中的key字符2)获取文件中的某个关键字key1, key2, key3: # cat fileName | grep -E "key1|key2|key3" #即获取fileName文件中的key1或key2或key3字符,满足一个条件即可获取!3)获取文件中的多个关键字,同时满足: # cat fileName | grep key1 | grep key2| grep key3 #即同时获取fileName文件中的key1,key2和key3,必须同时满足所有条件才可获取!4)忽略文件中的某个关键字, 需要转义"|": # cat fileName | grep -v "key1\|key2\|key3" #即过滤掉fileName文件中的key1或key2或key3,满足一个条件即可过滤!4)忽略文件中的多个关键字,: # cat fileName | grep -v "key1"| grep -v "key2"| grep -v "key3" #即过滤掉fileName文件中的key1,key2和key3,必须同时满足所有条件才可过滤! grep常用的还有:grep -i:表示不区分大小写grep -w:精准匹配 [或者使用单字边界"\<\>"或锁定单词"\b\b",即grep -w "str" 相等于 grep "\
grep精确匹配关键字符 使用grep搜索某个关键字时,默认搜索出来的是所有包含该关键字的行,如下:搜索/var/named/veredholdings.cn_zone文件中172.16.50.24所在的行,默认会把所有包括172.16.50.24所在的行打印出来。[root@uatdns01 ~]# cat /var/named/veredholdings.cn_zone|grep 172.16.50.24devzl-app01 IN A 172.16.50.243devzl-app02 IN A 172.16.50.244devzl-redis01 IN A 172.16.50.245devzl-redis02 IN A 172.16.50.246devzl-redis03 IN A 172.16.50.247devzl-oracle01 IN A 172.16.50.242wiki02 IN A 172.16.50.24
[root@uatdns01 ~]# cat /var/named/veredholdings.cn_zone|grep 172.16.50.24 --colordevzl-app01 IN A 172.16.50.243devzl-app02 IN A 172.16.50.244devzl-redis01 IN A 172.16.50.245devzl-redis02 IN A 172.16.50.246devzl-redis03 IN A 172.16.50.247devzl-oracle01 IN A 172.16.50.242wiki02 IN A 172.16.50.24
[root@uatdns01 ~]# cat /var/named/veredholdings.cn_zone|grep -o 172.16.50.24172.16.50.24172.16.50.24172.16.50.24172.16.50.24172.16.50.24172.16.50.24172.16.50.24
要想精确地搜索出文件中某个单词所在的行,而不是打印所有包括该单词字样的行,可以使用grep -w参数-w(--word-regexp):表示强制PATTERN仅完全匹配字词[root@uatdns01 ~]# cat /var/named/veredholdings.cn_zone|grep -w 172.16.50.24wiki02 IN A 172.16.50.24或者使用 \<\>单字边界也可以实现精确匹配(注意两边要加上双引号)[root@uatdns01 named]# cat /var/named/veredholdings.cn_zone|grep "\<172.16.50.24\>"wiki02 IN A 172.16.50.24或者使用单词锁定符\b也可以实现精确匹配[root@uatdns01 named]# cat /var/named/veredholdings.cn_zone|grep "\b172.16.50.24\b"wiki02 IN A 172.16.50.24
两个小面试题1)精确地找出名为abc的进程名。# ps -ef|grep -w "abc"或者# ps -ef|grep "\
[[ 需要注意 ]]:grep 使用 -w 或 \<\> 或 \b 进行精准匹配时,对于@,- 特殊字符是过滤不掉的,下划线_ 字符可以过滤掉。示例如下:
小示例1
写一个shell脚本,检查服务器上的main进程在不在 [root@two002 tmp]# ps -ef|grep mainroot 23448 23422 0 11:40 pts/0 00:00:00 grep --color=auto main[root@two002 tmp]# ps -ef|grep main|grep -v grep|wc -l0 [root@two002 tmp]# cat /tmp/main_check.sh#!/bin/bashNUM=$(ps -ef|grep main|grep -v grep|wc -l)if [ $NUM -eq 0 ];then echo "It's not good! main is stoped!"else echo "Don't worry! main is running!"fi 执行检查脚本[root@two002 tmp]# sh -x /tmp/main_check.sh++ grep main++ grep -v grep++ wc -l++ ps -ef+ NUM=2+ '[' 2 -eq 0 ']'+ echo 'Don'\''t worry! main is running!'Don't worry! main is running! [root@two002 tmp]# sh /tmp/main_check.shDon't worry! main is running! 如上发现,执行脚本/tmp/main_check.sh的过程中,看到NUM参数值是2!但是手动执行ps -ef|grep main|grep -v grep|wc -l的结果明明是0!! 这是由于grep匹配的问题,需要grep进行精准匹配,即"grep -w"这就需要将main_check.sh脚本内容修改如下:[root@two002 tmp]# cat /tmp/main_check.sh#!/bin/bashNUM=$(ps -ef|grep -w main|grep -v grep|wc -l)if [ $NUM -eq 0 ];then echo "Oh!My God! It's broken! main is stoped!"else echo "Don't worry! main is running!"fi 再次执行检查脚本,就正确了[root@two002 tmp]# sh -x /tmp/main_check.sh++ grep -w main++ grep -v grep++ wc -l++ ps -ef+ NUM=0+ '[' 0 -eq 0 ']'+ echo 'Oh!My God! It'\''s broken! main is stoped!'Oh!My God! It's broken! main is stoped! [root@two002 tmp]# sh /tmp/main_check.shOh!My God! It's broken! main is stoped!
小示例2
[root@localhost ABG]# ll /root/app/script/ansible/config/ABG/*.cfg|head -10-rw-rw-rw- 1 root root 176 Aug 22 14:26 /root/app/script/ansible/config/ABG/absTag.cfg-rw-rw-rw- 1 bxi bxi 435 Jun 11 2019 /root/app/script/ansible/config/ABG/accounting.cfg-rw-rw-rw- 1 root root 234 Sep 4 16:11 /root/app/script/ansible/config/ABG/accounting_springBoot.cfg-rw-rw-rw- 1 bxi bxi 276 Aug 7 15:21 /root/app/script/ansible/config/ABG/adapter.cfg-rw-rw-rw- 1 bxi bxi 359 Oct 29 14:47 /root/app/script/ansible/config/ABG/adapter-fe.cfg-rw-rw-rw- 1 root root 191 Dec 11 15:28 /root/app/script/ansible/config/ABG/aibank-service.cfg-rw-rw-rw- 1 root root 218 Jun 11 2019 /root/app/script/ansible/config/ABG/aicard-file.cfg-rw-rw-rw- 1 bxi bxi 261 Jun 11 2019 /root/app/script/ansible/config/ABG/aicard-mis.cfg-rw-rw-rw- 1 bxi bxi 288 Jun 11 2019 /root/app/script/ansible/config/ABG/aicard-service.cfg-rw-rw-rw- 1 root root 177 Nov 14 09:59 /root/app/script/ansible/config/ABG/aicase.cfg查看/root/app/script/ansible/config/ABG目录下的cfg结尾的配置文件中是否由带_A的配置,比如:[root@localhost ABG]# cat /root/app/script/ansible/config/ABG/mir-x-fund.cfg[mir-x-fund_F]172.16.60.20[mir-x-fund_A]172.16.60.22[mir-x-fund:children]mir-x-fund_Fmir-x-fund_A[mir-x-fund:vars]deploy_path=/opt/ABG/mir-x-fund/start_time_out=90stop_time_out=60module=mir-x-fund[root@localhost ABG]# cat /root/app/script/ansible/config/ABG/mir-x-fund.cfg|grep -w "*_A" [root@localhost ABG]# cat /root/app/script/ansible/config/ABG/mir-x-fund.cfg|grep -w ".*_A"[mir-x-fund_A]mir-x-fund_A脚本如下(主要用到grep -w ".*_A"):[root@localhost ABG]# cat /root/ABG_A_file.sh #!/bin/bashfor file in $(ls /root/app/script/ansible/config/ABG/*.cfg)do cat ${file}|grep -w ".*_A" >/dev/null 2>&1 if [ $? -ne 0 ];then echo -e "ABG的$(echo ${file}|awk -F"/" '{print $NF}'|awk -F".cfg" '{print $1}')没有A环境的配置。\n配置文件为${file}\n" fidone执行脚本(配置文件是"应用模块.cfg", ABG系统下的应用模块):[root@localhost ABG]# sh /root/ABG_A_file.shABG的accounting_springBoot没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/accounting_springBoot.cfgABG的aibank-service没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/aibank-service.cfgABG的aireader-service没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/aireader-service.cfgABG的backend-aiprogram-gateway没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/backend-aiprogram-gateway.cfgABG的backend-transation没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/backend-transation.cfgABG的backend-visitorguide没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/backend-visitorguide.cfgABG的code没有A环境的配置。配置文件为/root/app/script/ansible/config/ABG/code.cfg
grep高效搜索用法大全
发表评论
暂时没有评论,来抢沙发吧~