管道命令(pipe):
例:ls /etc | less;这个 `|` 就是管道命令,仅能处理经由前面一个命令传来的正确信息,也就是 standard output 的信息,对于 standard error 并没有直接处理的能力。下面来介绍一下一些管道命令。
选取命令(cut,grep)
cut:可以将一段信息的某一段 “切” 出来,处理的信息是以 “行” 为单位。
语法:
cut -d '分割字符' -f fields; //用于分割字符
cut -c 字符范围; //用于排列整齐的信息
参数:
-d:后面接分割字符,与 -f 一起使用;
-f:依据 -d 的分割字符将一段信息切割成为数段,用于 -f 取出第几段的意思;
-c:以字符(characters)的单位取出固定字符区间。
范例:echo $PATH | cut -d ':' -f 5; echo $PATH | cut -d ':' -f 3,5; export | cut -c 1-20
grep:刚才的cut是在一行信息当中取出某部分我们想要的,而grep则是分析一行信息,若当中有我们 需要的信息,就将改行拿出来。
语法:
grep [-acinv] [--color=auto] '查找字符串' filename
参数:
-a:将 binary 文件以text文件的方式查找数据;
-c:计算找到 ‘查找字符串’ 的次数;
-i: 忽略大小写的不同,所以大小写视为相同;
-n:顺便输出行号;
-v:反向选择,即显示出没有 '查找字符串' 内容的那一行;
--color=auto:可以将找到的关键字部分加上颜色显示;
范例:
last | grep 'root' //将 last 当中有出现root的那一行都取出来
last | grep -v 'root' //与上个例子相反,只要没有root的行
last | grep 'root' | cut -d ' ' -f 1 //取出数据后把根据 ' ' 分割取第一列
grep --color=auto 'MANPATH' /etc/man_db.conf
grep是一个很棒的命令。支持的语法很多,用在正则表达式里头,能够处理很多数据
排序命令(sort,wc,uniq)
sort:可以依据不同的数据类型进行排序。
语法:
sort [-fbMnrtuk] [file or stdin]
参数:
-f:忽略大小写的差异,例如 A 与 a 视为编码相同;
-b:忽略最前面的空格符部分;
-M:以月份的名字来排序,例如 JAN,DEC 等的排序方法
-n:使用“纯数字”进行排序(默认是以文字类型来排序)
-r:反向排序;
-u:就是 uniq ,相同的数据中,仅出现一行代表
-t:分隔符,默认使用(tab)键来分隔;
-k:以那个区间(field)来进行排序的意思
范例:
cat /etc/passwd | sort //可以看到默认“以第一个”数据来排序,而且默认“文字”类型排序
cat /etc/passwd | sort -t ':' -k 3 //可以看到每一行经过 ‘:’ 分隔后的第三列,但是这个排 序是按照文字类型排序,如果要按照数字排序,cat /etc/passwd | sort -t ':' -k 3 -n
last | cut -d ' ' -f 1 | sort //利用 last 将输出的数据仅取账号,并加以排序
uniq:将重复的数据仅列出一个显示。
语法:
uniq [-ic]
参数:
-i:忽略大小写字符的不同;
-c:进行计数
范例:
last | cut -d ' ' -f 1 | sort | uniq //将账号列出,仅取出账号列,进行排序后仅取出一位
last | cut -d ' ' -f 1 | sort | uniq -c //承上例,查到每个人登陆次数
wc:可以帮我们计算输出的信息的整体数据
语法:
wc [-lwm]
参数:
-l:仅列出行;
-w:仅列出多少字(英文单字);
-m:多少字符。
范例:
cat /etc/man_db.conf | wc //依次列出 行,字数, 字符数
//我们可以用 last 输出登陆者,但是 last 最后两行并非账号内容,我该如何以一行命令串取 得这个月份登陆系统的总人次? last | grep [a-zA-z] | grep -v 'wtmp' | wc -l
双向重定向:(tee)
tee:可以同时将数据流送到文件和到屏幕,而输出到屏幕的,其实就是stdout,可以继续处理
语法:tee [-a] file
参数:
-a:以累加(append)的方式,将数据加入file当中;
范例:
last | tee last.list | cut -d ' ' -f 1 //将 last 的输出内容存到last.list文件中
ls -l / | tee -a ~/homefile | more //加上-a将信息累加如文件中
字符转换命令(tr,col,join,paste,expand)
tr:可以用来删除一段信息当中的文字,或者是进行文字信息的替换
语法:
tr [-ds] SET1 ...
参数:
-d:删除信息当中的 SET1 这个字符串;
-s:替换掉重复的字符。
范例:
last | tr '[a-z]' '[A-Z]' //将 last 输出数据中所有小写字符变成大写字符,不加单引号也可以
cat /etc/passwd | tr -d ':' //将/etc/passwd输出信息中的冒号(:)删除
col:col经常被利用于将 man page 转存为纯文本文件以方便查阅的功能
语法:
col [-xb]
参数:
-x:将tab键转换成对等的空格键
-b:在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符
。。。。。。。。。。。。。。。。。更新中。。。。。。。。。。。。。。。。。