语系对正则的影响
不同语系的编码方式不同,在相同正则表达式的情况下,有可能造成截取的结果不一样,这时应该注意当前环境的语系
正则基础
(又是你,正则 = =!!)
正则:Regular Expression
在Linux中,正则经常搭配|grep来进行处理
特殊符号
[:alnum:]代表[a-z A-Z 0-9][:alpha:]代表[a-z A-Z][:lower:]代表[a-z][:upper:]代表[A-Z][:digit:]代表[0-9][:xdigit:]16位数字:[0-9 a-f A-F][:blank:]代表空格和tab[:graph:]除了空格和tab的其他按键[:print:]任何可以被打印出来的字符[:punct:]代表标点符号-
进阶的grep
grep [-A] [-B] '带搜索的字符串' filename [-A]即After,后面可跟数字,表示将找到的字符串后面n行也列出来[-B]即Before,后面可跟数字,表示将找到的字符串前面n行也列出来Linux中的限定连续
'*'代表匹配0到n此,若我们想匹配指定次数的字符,则可以使用\{num\},在bash中{}是有特殊意义的,所以要用转义符
此外限定连续还能这样用1.\{2,5\}:匹配2个到5个 2.\{2,\}:匹配两个以上Sed工具
sed [-nefri] [action]
参数:-n即silent模式,默认情况下sed会显示所有的文件内容,加上-n后,只会显示经过特殊处理的内容(相当于过滤不想要的信息-f将sed的动作写在一个文件内,sed通过-f filename可以执行filename内的动作-esed通过指令执行动作-r表示支持延伸型正则表达,预设是基础型正则表达-i表示对源文件进行直接修改,而不是打印到屏幕
动作(action):[n1,[n2]] action
- n1,n2代表行数选择,可以不写
- action:
-a:新增,后接字符串,字符串会出现在下一行-c:整行取代,后接字符串,字符串将取代n1,n2之间的行-d:删除,删除n1,n2之间的行-i:插入,同新增,只不过字符串会出现在上一行-p:打印,-s:字符取代,搭配正规表示法:例如1,20/oldS/newS/g
扩展:
NF:每一行的字段总数
- NR:这是第几行
- FS:目前的分隔符
awk的比较判断:
cat /etc/passwd |awk'BEGIN {FS=':'} $3<10{print $1 "\t" $3}'
上例的意思是,先用BEGIN指定该awk命令的分隔符为':',再将第三个元素与10进行判断,若其小于10,在进行后面的打印工作
diff命令
diff [-bBi] file1 file2
参数:
-b忽略一行中的多个空白字符-B忽略空白行-i忽略大小写
要能看懂比较差异后的结果,例如1. 4d3代表左边第4行被删了,基准是右边的第3行。2.6c5左边第6行被整行替换成右边第5行
