核心通配符:
* 匹配任意长度的任意文字 a*b a与b之间可以有任意长度的任意字符,也可以没有。
? 匹配任意单个字符 a ?b a与b之间必须也只能有一个字符,可以是任意字符
[ ] 匹配指定范围内的任意单个字符 [a-z] , [A-Z] , [0-9] ,[a-z0-9]
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
[[:alpha:]] 所有字母
[[:digit:]] 所有数字
[[:alnum:]] 所有的字母和数字
[[:space:]] 所有空白字符
[[:punct:]] 所有标点符号
[ ^ ] 匹配指定范围外的任意单个字符 [^[:upper:]] [^[:alnum:]] [^0-9]
例:ls -d /etc/[0-9]*[^0-9] : 显示/etc目录下 ,以任意一位数字开头,且以非数字结尾的文件或目录
正则表达式:
字符匹配 . 匹配任意单个字符
[ ] 匹配指定范围内的任意单个字符
[ ] 匹配指定范围外的任意单个字符
匹配次数 * 匹配其前面的字符任意次;
.* 匹配任意长度的任意字符
\? 匹配其前面的字符0次或1次,即其前面的字符可有可无;
+ 匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
\{m\} 匹配其前面的字符m次
\{m,n\} 匹配其前面的字符至少m次,至多n次,
\{0,n\} 至多n次
\{m,\} 至少m次
位置锚定 ^ 行首锚定;用于模式的最左侧!
$ 行尾锚定;用于模式的最左侧!
^pattern$ 用于pattern来匹配整行
^$ 匹配空白行
^[[:space:]]*$ 空行或包含空白字符的行
\< 或 \b 词首锚定,用于单词模式的左侧
\>或\b 词尾谋定,用于单词模式的右侧
分组及引用 \(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理
\(\)ab\1 模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
(\)ab\2 模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
(\)ab\3 ………………
Linux文本处理三剑客之grep
- -i 忽略字符的大小写
- -o 仅显示匹配到的字符串本身
- -v 显示不能被模式匹配到的行
- -E 支持使用扩展的正则表达式
- -q 不输出任何信息
例:显示/etc/passwd文件中不以/bin/bash结尾的行
frep -v "/bin/bash$" /etc/passwd
找出/etc/passwd文件中的两位数或三位数;
grep "\<[0-9]\{2,3\}\>" /etc/passwd
Linux文本处理之sed
- -n : 不输出模式空间中的内容至屏幕;
- -e : 多点编辑;
- -f :每行一个编辑命令;
- -r :支持使用扩展正则表达;
- -i :直接编辑源文件;
编辑命令: d :删除
- p : 显示模式空间中的内容
- w :保存模式空间匹配到的行至指定的文件中;
- r :读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
- s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
- 替换标记:
- g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
例:sed '/north/p' sed.txt !sed 把所有输入行都打印在标准输出上。如果在某一行匹配到 north, sed就把该行另外打印一遍。
sed -n '/north/p' sed.txt !-n,只打印处理过的
删除:sed '3d' sed.txt
替换 : sed 's/south/north/g' sed.txt (g是全局替换)
linux文本处理之awk:
- -F : 定义输入字段分割符;默认是空格或制表符;
- 命令格式:awk -F: '/root/' /etc/passwd
- awk -F: '{print $1}' /etc/passwd
ip a | grep 'inet ' | sed -n '2p' | awk -F'/' '{print $1}' | awk -F' ' '{print $2}'