一、文本处理命令:
1.wc: word count
wc [options] FILE
-l: 只显示行数;
-w 单词
-c 字符
2. tr: translate
tr [options] '原来的字符集合' '转换为的字符集合'
tr '123' 'abc'
-d '字符集合':把出现的文件中的,属于字符集合中的字符统统删除;
3. cut: 文本切割,最常用的功能是能够使用指定的符号作为行中内容的分隔符,将每一行切片,而只取出某些片;
cut [options] FILE
-d默认分隔符为空白,-d: 以冒号为分隔符
-f 1-5,7: f后可无空格
4.join 将两个文件中的指定行合并
5. sort: 排序不操作源文件仅输出
-f: 忽略字符大小写;
-n: 以数值大小进行排序;
-r: 降序;
-u: 移除重复的行,具有相同内容的行只保留一个;
-R: 随机排序;-k: 类似cut中-f
-t:类似cut中-d如
# grep “/bin/bash$” /etc/passwd | sort –n –t: –k3 | head –1 | cut –d: -f1
6. uniq:
-c:统计每行重复的次数;
-u:只显示没有重复的行
-d: 只显示重复过的行;
二、管道、重定向
管道:shell, COMMAND1 | COMMAND2
程序:读入数据,执行结果输出
stdin: Standard Input,标准输入,默认输入
stdout: Standard Output, 标准输出,默认输出
例 echo password | passwd –stdin username
三、grep
1.grep 常用限定条件
grep [options] 'pattern' FILE
正则表达式:基本正则表达式,扩展正则表达式;
基本正则表达式:贪婪模式(尽可能长地去匹配符合模式的内容)
^锚定行首的符合条件的内容,用法格式“^pattern”;
$锚定行尾的符合条件的内容,用法格式“pattern$”;
.匹配任意单个字符
*匹配紧挨在其前面的字符任意次;
a*b: ab, aab, acb(匹配0次,此例针对部分字符串而非整个字符串), b(匹配0次)
.*匹配任意长度的任意字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
扩展正则表达式:
.: 任意单个字符
[]:
[^]:
*
+: 匹配其前面的字符至少1次;比基本正则多出的
?:
{m,n}: 至少m次,至多n次; 匹配可无反斜线与基本正则不同
():分组,支持引用\1, \2; 分组前可无反斜线与基本正则不同
a|b: 二选一;比基本正则多出的 egrep ^(a|A) 以A/a开头
\<
\>
^
$
[a-z], [A-Z], [0-9]
[:lower:] a-z
[:upper:]
[:digit:]
[:alpha:]
[:alnum:]
[:space:]
[:punct:]
对应解释:
[:alnum:]
Alphanumeric characters: `[:alpha:]' and `[:digit:]'.
[:alpha:]
Alphabetic characters: `[:lower:]' and `[:upper:]'.
[:blank:]
Blank characters: space and tab.
[:cntrl:]
Control characters. In ASCII, these characters have octal codes
000 through 037, and 177 (`DEL'). In other character sets, these
are the equivalent characters, if any.
[:digit:]Digits: `0 1 2 3 4 5 6 7 8 9'.
[:graph:]
Graphical characters: `[:alnum:]' and `[:punct:]'.
[:lower:]Lower-case letters: `a b c d e f g h i j k l m n o p q r s t u v w
x y z'.
[:print:]
Printable characters: `[:alnum:]', `[:punct:]', and space.
[:punct:]
Punctuation characters: `! " # $ % & ' ( ) * + , - . / : ; < = > ?
@ [ \ ] ^ _ ` ~'.
[:space:]Space characters: tab, newline, vertical tab, form feed, carriage
return, and space.
[:upper:]
Upper-case letters: `A B C D E F G H I J K L M N O P Q R S T U V W
X Y Z'.
[:xdigit:]
Hexadecimal digits十六进制: `0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f'.
grep "r[0-9].*h" /etc/passwd
\?: 匹配紧挨在其前面的字符0次或1次;
a\?b: ab, aab, acb, b
\{m,n\}: 匹配其前面的字符至少m次,至多n次;
\{0,n\}: 至多n次;0-n次;
\{m,\}:至少m次
\{m\}: 精确匹配m次;
a\{1,3\}b: b, ab, aab, aaab, aaaaaab, acb
grep "[bB].\{2,5\}[tT]": Boot, B123T, bxy12T
\<: 锚定词首,用法格式:\<pattern
\b: \bpattern
\>: 锚定词尾,用法格式:pattern\>
\b: pattern\b
\<pattern\>:锚定单词
\(\): 分组,用法格式: \(pattern\)
\(ab\)\{1,3\}: ab, aab, abb, abab, ababab,
ab任意字符ab:ab.*ab
a.b任意字符a.b: \(a.b\).*\1--引用之前的分组,数字为匹配的前面出现的第几个分组
2.grep的选项:
--color=auto
export GREP_COLOR='01;36'
-v: 反向选取,只显示不符合模式的行;
-o: 只显示被模式匹配到的字串,而不是整个行;
-i: 不区分字符大小写;
-A #:显示匹配到的行时,顺带显示其后面的#个行;
-A 2
-B #:前面的#行;
-C #:前后的#行;
-E: 使用扩展的正则表达式
grep -E = egrep
-w: 即锚定词首词尾
-r:递归查找 如 grep “^root” /etc
一个例子
找出ifconfig命令结果中的1-255之间的整数;
ifconfig | grep --color=auto -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"