写在前面, 语系对正则匹配会有影响。
特殊符号代表意义[:alnum:]0-9, a-z, A-Z[:alpha:]A-Z, a-z[:blank:]空格和Tab[:cntrl]键盘的控制按键[:digit:]0-9[:graph:]除了空格和Tab以外所有的按键[:lower:]a-z[:print:]代表任何可以被打印的出来的字符[:punct:]代表标点符号[:upper:]A-Z[:space:]任何产生空白的字符串[:xdigit:]代表十六进制的数字类型
几个例子:
grep -in 'the' xxx.txt 忽略大小写, 列出行号, 行中有没有出现过 the grep -n 't[ae]st' xx.txt grep -n '[^g]oo' xx.txt 非, 不已g开头 grep -n '[^[:lower:]]oo' oo前不已小写字母开头 grep -n '[^[:lower:]]oo' grep -n '^[^a-zA-Z]' 不以字母开头 grep -v '^$' xx.txt 匹配空白行 v 反向选择 grep -n 'go\{2,5\} a.txt 注意{} 要转义
-n 使用安静模式,在一般的sed用法中, 所有来自stdin的数据会被列出到屏幕上。但如果加上了-n参数后,则只有经过sed处理的那一行才会被显示出来
-e 直接再命令行模式进行seb编辑操作
-f 直接将sed的操作写在一个文件内,
-r sed的操作使用的是扩展的正则表达式, 默认的是基础的正则
-i 直接修读取的文件内容, 而不是屏幕输出
n1,n2 function n1, n2指定操作的行,
a 新增, a后面可以接字符串, 加再当前行的下一行
c 替换, c后面字符串, 将替换n1, n2的行
d 删除
i 插入, 后面加字符, 插入当前行的上一行
p 打印
s 替换, 可以搭配正则, s/ / /g
egrep <==> gerp - E
egrep -v '^$|^#' xxx.txt v 反选
$0 代表一整行数据, $1第一栏
awk 还有如下的变量
NF每一行拥有的总段数,几栏NR处理的是第几行数据FS目前的分隔符, 默认时空格 [root@ ~]# last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF }' root lines: 1 columns: 10 root lines: 2 columns: 10 root lines: 3 columns: 10 root lines: 4 columns: 10 root lines: 5 columns: 10加上逻辑判断
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}' 如果第三栏小于10, 则按要求打印 但是第一行没显示出来, 因为FS=":" 从第二行才开始生效 所以可以这样 cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}'
-b 忽略一行多个空白差异 do it 和 do it 的擦别
-B 忽略空白行差异
-i 忽略大小写
diff passwd.old passwd.new < 4d3 左边的文件第四行被删了, 基准是右边的第三行 < 6c5 左边文件的第六行被替换成右边的第五行 。。。。。。
-l 列出虽有不同地方, 默认不加, 只列出一个不同
cmp passwd.ord passwd.new