您的位置:首页 > 运维架构 > Linux

Linux之管道命令(cut,grep,sort,wc,uniq...)

2016-09-26 00:00 274 查看
摘要: 内容总结来源于《鸟哥的Linux私房菜》

管道命令(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:在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符

。。。。。。。。。。。。。。。。。更新中。。。。。。。。。。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息