一、grep grep----过滤、筛选
grep "字符串"
grep -v "字符串"
grep ^"字符串" 以....开头
grep "字符串"$
grep ^$ 空行
grep -i 不区分大小写
grep -o 只显示匹配的部分
二、sed 1 2 3 4 5 6 7 8 9 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容发送往屏幕。然后读入下行,执行下一个循环。 如果没有诸如“D”的特殊命令,那会在两个循环之间清空模式空间,但不能清除保留空间。这样不断重复,直到文件末尾。 文件内容并没有改变,除非你使用重定向存储输出或-i。 选项 -n 不打印模式空间 -e 执行脚本、表达式来处理 -f 执行动作从文件读取执行 -i 修改原文件 -r 使用扩展正则表达式
命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 s/regexp/replace/ 替换字符串 p 打印当前模式空间 P(大写) 打印模式空间的第一行 d 删除模式空间,开始下一个循环 D 删除模式空间的第一行,开始下一个循环 = 打印当前行号 a \text 当前行追加文本 i \text 当前行上面插入文本 c \text 所选行替换新文本 q 立即退出sed脚本 r 追加文本来自文件 h H 复制/追加模式空间到保持空间 g G 复制/追加保持空间到模式空间 x 交换模式空间和保持空间内容 l 打印模式空间的行,并显示控制字符$ n N 读取/追加下一行输入到模式空间 w filename 写入到当前模式空间到文件 ! 取反、否定 & 引用已匹配字符串
地址 1 2 3 4 5 6 7 first~step 从first开始,每step步输出值 $ 匹配最后一行 /regexp/ 正则表达式匹配行 number 只匹配指定行 addr1,addr2 开始匹配addr1行开始,直接addr2行结束 addr1,+N 从addr1行开始,向后的N行 addr1,~N 从addr1行开始,到N行结束
案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp 匹配打印(p) (1 )打印匹配blp5开头的行 [root@node1 ~] [root@node1 ~] blp5 48129 /tcp blp5 48129 /udp (2 )打印第一行 [root@node1 ~] nimgtw 48003 /udp (3 )打印第一行至第三行 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp (4 )打印奇数行 [root@node1 ~] 1 3 5 7 9 (5 )打印匹配行及后一行 [root@node1 ~] blp5 48129 /tcp blp5 48129 /udp (6 )打印最后一行 [root@node1 ~] iqobject 48619 /udp (7 )不打印最后一行 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp (8 )匹配范围 [root@node1 ~] blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp 匹配blp5所在行到最后一行 [root@node1 ~] blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (9 )引用系统变量,用引号 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp 或者 [root@node1 ~]
删除匹配 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp [root@node1 ~] 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp [root@node1 ~] 3gpp-cbsp 48049 /tcp isnetserv 48128 /udp blp5 48129 /udp com-bardac-dw 48556 /udp iqobject 48619 /udp [root@node1 ~] isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp 打印时把匹配的打印出来,删除时把匹配的删除,删除只是不用-n选项 练习:去除空格/etc/httpd/conf/httpd.conf文件的空行或开头 sed '/^#/d;/^$/d' /etc/httpd/conf/httpd.conf
替换(s///) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 (1 )替换blp5字符串为test [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp test 48129 /tcp test 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp 全局替换加g [root@node1 ~] (2 )替换开头是blp5的字符串并打印 [root@node1 ~] test 48129 /tcp test 48129 /udp (3 )使用&命令引用匹配内容并替换 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049.123 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp ip加引号 [root@node1 ~] "10.10.10.1" "10.10.10.2" "10.10.10.3" (4 )对1 -5 行的blp5进行替换 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp test 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (5 )对匹配行进行替换,先匹配出来48129 /tcp所在行,然后再将改行的blp5字符串替换为test [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp test 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (6 )二次匹配替换 [root@node1 ~] nimgtw 48003 /udp 4gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp test 48129 /tcp test 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (7 )分组使用 [root@node1 ~] nimgtw 48003 /udp test 3gpp-cbsp 48049 /tcp test isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (8 )将协议与端口号位置互换 [root@node1 ~] nimgtw udp/48003 3gpp-cbsp tcp/48049 isnetserv tcp/48128 isnetserv udp/48128 blp5 tcp/48129 blp5 udp/48129 com-bardac-dw tcp/48556 com-bardac-dw udp/48556 iqobject tcp/48619 iqobject udp/48619 (9 )位置调换 [root@node1 ~] abc cde Xyz [root@node1 ~] abc cde xxyXz [root@node1 ~] abc cde xxYxz 将cde和456 互换位置 [root@node1 ~] abc:456 ;123 :cde (10 )注释匹配行后的多少行 [root@node1 ~] 1 2 3 4 9 10 (11 )注释指定多行 [root@node1 ~] 1 2 5 [root@node1 ~] 1 2 5 案例4 :多重编辑 删除1 -4 行,并将剩余行的blp5替换为test [root@node1 ~] test 48129 /tcp test 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp 或 [root@node1 ~] test 48129 /tcp test 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp
添加新内容(a、i、c) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 (1 )在blp5上一行添加test [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp test blp5 48129 /tcp test blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp [root@node1 ~] (2 )在blp5下一行添加test [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp test blp5 48129 /udp test com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (3 )将blp5所在行替换为新行test [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp test test com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (4 )在指定行的下一行添加一行 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp test isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp (5 )在指定行前面和后面添加一行 [root@node1 ~] 1 2 txt 3 4 5 [root@node1 ~] 1 2 3 test 4 5 案例6 :读取文件并追加到匹配行后(r) [root@node1 ~] 123 456 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp 123 456 blp5 48129 /udp 123 456 com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp
将匹配行写到文件(w) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp [root@node1 ~] blp5 48129 /tcp blp5 48129 /udp
读取下一行(n和N) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 n 读取下一行到模式空间。 N 追加下一行内容到模式空间,并以换行符\n 分隔。 (1 )打印匹配的下一行 [root@node1 ~] 4 (2 )打印偶数 [root@node1 ~] 2 4 6 sed 先读取第一行 1 ,执行 n 命令,获取下一行 2 ,此时模式空间是 2 ,执行 p 命令,打印模式空 间。 现在模式空间是 2 ,sed 再读取 3 ,执行 n 命令,获取下一行 4 ,此时模式空间为 4 ,执行 p 命 令,以此类推。 (3 )打印奇数 [root@node1 ~] 1 3 5 读取1 ,执行n,得出2 ,执行d,删除2 ,得空,以此类推,读取3 ,执行n,得出4 , 执行d,删除4 ,得空,但是读取5 时,得出6 ,执行d,删除6 。 因无-n参数,故输出1 \n3\n5 [root@node1 ~] 1 3 5 (4 )每三行执行一次p命令 [root@node1 ~] 1 2 3 3 4 5 6 6 sed 先读取第一行 1 ,并打印模式空间 1 ,执行 n 命令,获取下一行 2 ,并打印模式空间 2 ,再执行 n 命令,获取下一行 3 ,执行 p 命令,打印模式空间 3 。sed 读取下一行 3 ,并打印模式空间 3 ,以此类 推。 (5 )每三行替换一次 方法1 :只是把p命令改成了替换命令 [root@node1 ~] 1 2 =3 = 4 5 =6 = 方法2 :这次用到了地址匹配,来实现上面的效果 [root@node1 ~] 1 2 =3 = 4 5 =6 = 当执行多个 sed 命令时,有时相互会产生影响,我们可以用大括号{}把他们括起来 (6 )再看下N命令的功能 [root@node1 ~] 1 2 将两行合并一行: [root@node1 ~] 12 34 56 第一个命令:sed 读取第一行 1 ,N 命令读取下一行 2 ,并以\n2 追加,此时模式空间是 1 \n2,再执 行 q 退出。 为了进一步说明 N 的功能,看第二个命令:执行 N 命令后,此时模式空间是 1 \n2,再执行把\n 替换 为空,此时模式空间是 12 ,并打印。 [root@node1 ~] 1 2 3 4 [root@node1 ~] 1 2 3 4 5 6 为什么第一个不打印 5 呢? 因为 N 命令是读取下一行追加到 sed 读取的当前行,当 N 读取下一行没有内容时,则退出,也不会 执行 p 命令打印当前行。 当行数为偶数时,N 始终就能读到下一行,所以也会执行 p 命令。 [root@node1 ~] 1 2 3 4 5 加一个满足条件,当 sed 执行到最后一行时,用感叹号不去执行 N 命令,随后执行 p 命令 案例9 :打印和删除模式空间第一行(P(大写)和D) P(大写) 打印模式空间的第一行。 D 删除模式空间的第一行。 (1 )打印奇数 [root@node1 ~] 1 3 5 [root@node1 ~] 6 读取第一行 1 ,执行 N 命令读取下一行并追加到模式空间,此时模式空间是 1 \n2,执行 D 命令删除 模式空间第一行 1 ,剩余 2 。 读取1 ,执行N,得出1 \n2,执行D,得出2 ,执行N,得出2 \n3,执行D,得出3 ,依此类推,得出6 , 执行N,条件失败退出,因无-n参数,故输出6 案例10 :保持空间操作(h与H,g与G和x) h 复制模式空间内容到保持空间(覆盖)。 H 复制模式空间内容追加到保持空间。 g 复制保持空间内容到模式空间(覆盖)。 G 复制保持空间内容追加到模式空间。 x 模式空间与保持空间内容互换 (1 )将匹配的内容覆盖到另一个匹配 [root@node1 ~] 1 2 4 3 6 h 命令把匹配的 3 复制到保持空间,d 命令删除模式空间的 3 。后面命令再对模式空间匹配 5 ,并用 g 命令把保持空间 3 覆盖模式空间 5 。 (2 )将匹配的内容放到最后 [root@node1 ~] 1 2 4 5 6 3 (3 )交换模式空间和保持空间 [root@node1 ~] 1 2 4 3 6 5 在模式空间匹配 5 并将保持空间的 3 与 5 交换,5 就变成了 3 ,。最后把保持空间的 5 追加到模式空间的。
三、awk 1 2 3 4 5 6 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件、数据排序、计算以及 生成报表等等。 awk 处理的工作方式与数据库类似,支持对记录和字段处理,这也是 grep 和 sed 不能实现的。 在 awk 中,缺省的情况下将文本文件中的一行视为一个记录,逐行放到内存中处理,而将一行中的 某一部分作为记录中的一个字段。用 1,2,3...数字的方式顺序的表示行(记录)中的不同字段。用 $后跟数字,引用对应的字段,以逗号分隔,0 表示整个行。
1、选项: 1 2 3 4 5 6 -f 从文件中读取awk程序源文件 -F 指定fs为输入字段分隔符 -v 变量赋值 --posix 兼容posix正则表达式 --dump-variables=[file] 把awk命令时的全局变量写入文件,默认文件是awkvars.out --profile=[file] 格式化awk语句到文件,默认是awkprof.out
2、模式 1 2 3 4 5 6 7 8 常用模式有: BEGIN{ } 给程序赋予初始状态,先执行的工作 END{ } 程序结束之后执行的一些扫尾工作 /regular expression/ 为每个输入记录匹配正则表达式 pattern && pattern 逻辑and,满足两个模式 pattern || pattern 逻辑or,满足其中一个模式 !pattern 逻辑not,不满足模式 pattern1,pattern2 范围模式,匹配所有模式1的记录,直到匹配到模式2
示例 1、从文件读取awk程序处理文件 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@node1 ~] {print $2 } [root@node1 ~] 48003 /udp48049 /tcp48128 /tcp48128 /udp48129 /tcp48129 /udp48556 /tcp48556 /udp48619 /tcp48619 /udp
2、指定分隔符,打印指定字段 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@node1 ~] root bin daemon adm lp ....... 还可以指定多个分隔符,作为同一个分隔符处理: [root@node1 ~] com-bardac-dw iqobject iqobject [root@node1 ~] com-bardac-dw 48556 iqobject 48619 iqobject 48619 [root@node1 ~] udp tcp udp [root@node1 ~] 48556 48619 48619 []元字符的意思是符号其中任意一个字符,也就是说每遇到一个/或 分隔符时,就能更方面处理字段了
3、变量赋值 1 2 3 4 5 6 7 8 9 10 [root@node1 ~] 123 系统变量作为awk变量的值 [root@node1 ~] [root@node1 ~] 123 或使用单引号 [root@node1 ~] 123 [root@node1 ~]
4、输出 awk 全局变量到文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@node1 ~] 1 2 3 4 5 [root@node1 ~] ARGC: 1 ARGIND: 0 ARGV: array, 1 elements BINMODE: 0 CONVFMT: "%.6g" ENVIRON: array, 29 elements ERRNO: "" FIELDWIDTHS: "" FILENAME: "-" FNR: 5 FPAT: "[^[:space:]]+" FS: " " FUNCTAB: array, 41 elements IGNORECASE: 0 LINT: 0 NF: 1 NR: 5 OFMT: "%.6g" OFS: " " ORS: "\n" PREC: 53 PROCINFO: array, 20 elements RLENGTH: 0 ROUNDMODE: "N" RS: "\n" RSTART: 0 RT: "\n" SUBSEP: "\034" SYMTAB: array, 28 elements TEXTDOMAIN: "messages" [root@node1 ~]
5、BEGIIN和END 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 BEGIN 模式是在处理文件之前执行该操作,常用于修改内置变量、变量赋值和打印输出的页眉或标题。 例如:打印页眉 [root@node1 ~] Service Port Description === nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp END 模式是在程序处理完才会执行。 例如:打印页尾 [root@node1 ~] nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp === END......
6、格式化输出awk命令到文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [root@node1 ~] Service Port Description === nimgtw 48003 /udp 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp isnetserv 48128 /udp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp com-bardac-dw 48556 /udp iqobject 48619 /tcp iqobject 48619 /udp === END...... [root@node1 ~] BEGIN { print "Service\t\tPort\t\t\tDescription\n===" } { print $0 } END { print "===\nEND......" }
7、/re/正则匹配 1 2 3 4 5 6 7 匹配包含 tcp 的行: [root@node1 ~] 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp blp5 48129 /tcp com-bardac-dw 48556 /tcp iqobject 48619 /tcp
8、逻辑 and、or 和 not 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 匹配记录中包含 blp5 和 tcp 的行: [root@node1 ~] blp5 48129 /tcp 匹配记录中包含 blp5 或 tcp 的行: [root@node1 ~] 3gpp-cbsp 48049 /tcp isnetserv 48128 /tcp blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp iqobject 48619 /tcp 不匹配开头是 [root@node1 ~] 或者 [root@node1 ~]
9、匹配范围 1 2 3 4 [root@node1 ~] blp5 48129 /tcp blp5 48129 /udp com-bardac-dw 48556 /tcp