语系对正则的影响
不同语系的编码方式不同,在相同正则表达式的情况下,有可能造成截取的结果不一样,这时应该注意当前环境的语系
正则基础
(又是你,正则 = =!!)
正则: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内的动作-e
sed通过指令执行动作-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行