一、grep —— 文本搜索工具
格式:grep [OPTIONS] PATTERN [FILE...]
OPTIONS:
-i:忽略大小写
--color:显示匹配字符高亮颜色
-v:取反
-o:只显示被匹配到的字符串
-c:只显示匹配结果行数
-n:显示匹配结果的同时在前面显示在该文件里对应的行数
-E:使用扩展正则表达式
-A 行数:显示匹配行数和匹配行数的后两行
-B 行数:显示匹配行数和匹配行数的前两行
-C 行数:显示匹配行数和匹配行数的前后两行
正则表达式:
元字符:
.:表示匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:
[:space:]:空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]:大写字母
[:alpha:]:大小写字母
[:digit:]:数字
[:alnum:]:数字和大小写字母
匹配次数:
*:匹配其前面的字符任意(0次或多次)
.*:任意长度的任意字符
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,最多n次
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行
单词锚定:
\<:其后面的任意字符必须作为单词的首部出现
\>:其前面的任意字符必须作为单词的尾部出现
\(\):分组
example:\(ab\)*:可以匹配任意个ab
后向引用:
\1:引用第一个左括号以及与之对应的右括号所包含的所有内容(前面匹配到什么,后面就引用什么)
\2:引用第二个左括号
\3:引用第三个左括号
...
example:从/etc/inittab文件中找出包含0-9后面跟任意字符串以0-9结尾的行(\1引用[0-9]);
grep ‘\([0-9]\).*\1$‘ /etc/inittab
扩展正则表达式:grep -E 或 egrep
字符匹配:
.
[ ]
[^]
次数匹配:
*:匹配其前面的字符任意(0次或多次)
?:匹配其前面的字符1次或0次
+:匹配其前面的字符至少1次
{m,n}:匹配其前面的字符至少m次,最多n次
位置锚定:
^
$
\<
\>
分组:()
\1,\2,\3,...
|:或
example:A|abc,匹配A或者abc
二、sed —— Stream EDitorsed(流编辑器)
格式:sed [OPTIONS] ‘AddressCommand‘ file ...
OPTIONS:
-n:静默模式,不再默认显示模式空间中的内容
-i:直接修改原文件
-e script -e script:可以同时执行多个脚本
-f file:指定文件脚本
-r:表示使用扩展正则表达式
Address:
1、StartLine,EndLine
比如1,100
$:最后一行
$-1:倒数第二行
2、/RegExp/
/^root/——>以root开头的行
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束,这中间的所有行
4、LineNumber
指定的行
5、StartLine,+N
从StartLine开始,向后的N行
Command:
d:删除符合条件的行
p:显示符合条件的行
a \string:在指定的行后面追加新行,内容为string
example:sed ‘/^\//a \# hello\n# test‘ /etc/fstab——>在/开头的行后添加hello和test两行
\n:换行
i \string:在指定的行前面追加新行,内容为string
r file:将指定的文件跟内容添加到符合条件的行处
example:sed ‘2r /etc/issue‘ /etc/fstab——>将/etc/issue的内容添加到/etc/fstab文件的第二行后
w file:将指定范围内的行另存到指定的文件中
s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
加修饰符:
g:全局替换
i:忽略大小写
&:引用模式匹配到的整个字符串
example:
sed ‘s/l..e/&r/g‘ file——>把匹配到的用&引用到后面
sed ‘s/\(l..e\)/\1r/g‘ file
sed ‘s/l\(..e\)/L\1/g‘ file