文本处理
grep命令
grep命令:查找文件里符合条件的字符串
grep函数用于在文件中查找可以与模式匹配的文本,并显示其所在行
grep函数的模式字符串即为基础正则表达式:
grep [-acinv] [-AB] [--color=auto] [mode] [file]
选项:
-a 将二进制文件当做文本文件处理
-c 统计找到匹配的次数
-i 忽略大小写
-n 输出匹配的行号
-v 反向查找,即输出不存在匹配的行
-A After,输出匹配的行后面所有行
-B Before,输出匹配的行前所有行
--color=auto 将匹配的内容自动使用不同颜色显示
基础正则表达式:
-
特定字符串 直接使用单引号括起,特殊字符需要在前面加‘\’转义,解除其特殊功能。
-
包含/不包含 某集合的元素
[字符集] 代表字符集中任意一个字符,在表达式中占一个字符的位置
[^字符集] 代表字符集不包含的任意一个字符,在表达式中占一个字符的位置
字符集的描述可以将所有元素写出,无需分隔符每个字符即为一个元素(如:[abc])
也可以按照语系字符集的顺序写出(如在LANG=C下的[a-z]表示全体小写英文字母,或[a-z0-9]表示全体小写字母或者数字)
- 行首行尾
Linux风格的文本,行首标记为“^”, 如'^a'表示第一个字符是a的行。行尾标记为“”,′z”,′z'表示最后一个字符为z的行
自然地,'^$'表示空行
- 任意字符
.
任意单个字符,在表达式中占一个字符的位置
* 0
至无穷个前一字符的重复,如'a*'表示a后面跟0至无穷个a组成的字符串。
.*
表示任意字符0至无穷次重复,它在正则表达式中表示任意字符串
扩展正则表达式:(grep不支持,使用egrep或grep -E):
+
重复一个或一个以上的前一个字符,如a+
?
0个或一个的前一个字符, 如a?
|
逻辑或
(a|b)
组字符串,代表字符串a或字符串b
(|)+
表示重复1次或以上的组字符串
Sed命令
sed命令:一种在线编辑器,它一次处理一行内容
sed是以行为单位的支持正则表达式的字符串处理命令
处理时,把当前处理的行存储在临时缓冲区中,称为'模式空间'(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [-inefr] {处理命令/脚本文件} [处理文件]
选项:
-n 使用安静模式。若无此参数来自stdin的数据会全部输出到屏幕,若使用此参数则只有经过sed处理的行才会显示
-e 直接在命令行中输入处理命令
-f filename 添加脚本文件
-r 启用扩展正则表达式支持(默认支持基础正则表达式)
-i 直接将修改写入文件,默认将其输出到stdout。
处理命令 '[n1, [n2]]op str' n1,n2表示从n1到n2所有行(闭区间)作为当前行,op是操作符,str是操作符后所接的字符串