每天学点Linux-选取命令CUT和GREP

  选取命令就是将一段数据经过分析后,取出我们所想要的。或者是经由分析关键词,取得我们所想要的那一行!一般来说,选取命令通常是针对一行一行的数据来进行分析的, 并不是整篇信息分析。
cut
  cut命令可以将一段信息的某一段选取出来,信息处理一行为单位。CUT命令使用格式如下:

[[email protected] ~]# cut -d‘分隔字符‘ -f fields <==用于有特定分隔字符
[[email protected] ~]# cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

  范例一:将 PATH 变量取出,我要找出第五个路径。

[[email protected] ~]# echo $PATH | cut -d ‘:‘ -f 5
# 如同上面的数字显示,我们是以『 : 』作为分隔,因此会出现 /usr/local/bin
# 那么如果想要列出第 3 与第 5 呢?,就是这样:
[[email protected] ~]# echo $PATH | cut -d ‘:‘ -f 3,5

  范例二:将 export 输出的信息,取得第 12 字符以后的所有字符串

[[email protected] ~]# export
declare -x HISTSIZE="1000"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x LANG="zh_TW.big5"
.....(其他省略).....
# 注意看,每个数据都是排列整齐的输出!如果我们不想要『 declare -x 』时,
# 就得这么做:

[[email protected] ~]# export | cut -c 12-
HISTSIZE="1000"
INPUTRC="/etc/inputrc"
KDEDIR="/usr"
LANG="zh_TW.big5"

  CUT -d命令适合操作具有固定分割符的文本,用 -c 可以处理比较具有格式的输出数据,还可以指定某个范围的值,例如第 12-20 的字符,就是 cut -c 12-20。cut 主要的用途在于将『同一行里面的数据进行分解!』最常使用在分析一些数据或文字数据的时候! 这是因为有时候我们会以某些字符当作分割的参数,然后来将数据加以切割,以取得我们所需要的数据。 鸟哥也很常使用这个功能呢!尤其是在分析 log 文件的时候!不过,cut 在处理多空格相连的数据时,可能会比较吃力一点。

grep

   cut是将一行信息当中,取出某部分我们想要的,而grep则是分析一行信息, 若当中有我们所需要的信息,就将该行拿出来。其使用方法如下:

[[email protected] ~]# grep [-acinv] [--color=auto] ‘搜寻字符串‘ filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字符串‘ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串‘ 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!

  具体的操作实例如下:

范例一:将 last 当中,有出现 root 的那一行就取出来;
[[email protected] ~]# last | grep ‘root‘

范例二:与范例一相反,只要没有 root 的就取出!
[[email protected] ~]# last | grep -v ‘root‘

范例三:在 last 的输出信息中,只要有 root 就取出,并且仅取第一栏
[[email protected] ~]# last | grep ‘root‘ |cut -d ‘ ‘ -f1
# 在取出 root 之后,利用上个命令 cut 的处理,就能够仅取得第一栏啰!

范例四:取出 /etc/man.config 内含 MANPATH 的那几行
[[email protected] ~]# grep --color=auto ‘MANPATH‘ /etc/man.config
....(前面省略)....
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
MANPATH_MAP     /usr/bin/mh             /usr/share/man

排序命令: sort, wc, uniq

  sort命令可以进行排序,而且可以依据不同的数据型态来排序,排序的字符与语系的编码有关。

[[email protected] ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思

  范例一:个人账号都记录在 /etc/passwd 下,请将账号进行排序。

[[email protected] ~]# cat /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

  范例二:/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何?

[[email protected] ~]# cat /etc/passwd | sort -t ‘:‘ -k 3
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

  看到特殊字体的输出部分了吧?怎么会这样排列啊?如果是以文字型态来排序的话,原本就会是这样,想要使用数字排序,使用-n来以数字来排序。

# cat /etc/passwd | sort -t ‘:‘ -k 3 -n

uniq
  uniq命令可以用来去除重复的数据,仅仅保留一行,其使用方法如下:

[[email protected] ~]# uniq [-ic]
选项与参数:
-i  :忽略大小写字符的不同;
-c  :进行计数

  范例一:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位;

[[email protected] ~]# last | cut -d ‘ ‘ -f1 | sort | uniq

  范例二:承上题,如果我还想要知道每个人的登陆总次数呢?

[[email protected] ~]# last | cut -d ‘ ‘ -f1 | sort | uniq -c
      1
     12 reboot
     41 root
      1 wtmp

  UNIQ这个命令用来将重复的行删除掉只显示一个,举个例子来说, 你要知道这个月份登陆你主机的用户有谁,而不在乎他的登陆次数,那么就使用上面的范例, (1)先将所有的数据列出;(2)再将人名独立出来;(3)经过排序;(4)只显示一个! 由于这个命令是在将重复的东西减少,所以当然需要『配合排序过的文件』来处理啰!
wc
  如果想要知道文件里面有多少字?多少行?多少字符的话可以利用 wc 这个命令来达成,WC可以帮我们计算输出的信息的整体数据。其使用方法如下:

[[email protected] ~]# wc [-lwm]
选项与参数:
-l  :仅列出行;
-w  :仅列出多少字(英文单字);
-m  :多少字符;

  范例一:那个 /etc/man.config 里面到底有多少相关字、行、字符数?

[[email protected] ~]# cat /etc/man.config | wc
    141     722    4617

  输出的三个数字中,分别代表: 行、字数、字符数

时间: 2024-08-06 21:11:59

每天学点Linux-选取命令CUT和GREP的相关文章

Linux管线命令 - cut,grep,sort,uniq,wc,tee,tr,col,join,paste,expand,split,xargs

在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail 等都是可以接受 standard input 的管线命令啦.至于例如 ls, cp, mv 等就不是管线命令了!因为 ls, cp, mv 并不会接受来自 stdin 的数据. 也就是说,管线命令主要有两个比较需要注意的地方: 管线命令仅会处理 standard output,对于 standar

Linux常用命令(三十一) - grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板.如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名.搜索的结果被送到标准输出,不影响原文件内容. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成

linux每日命令(35):grep命令

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板.如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名.搜索的结果被送到标准输出,不影响原文件内容. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成

Linux常用命令——cut

cp 复制文件或目录 语法格式:cp [option][source][dest] cp [选项] [源文件] [目标文件]注意:cp 命令及后面的选项和文件里,每个元素之间都要至少要有一个空格选项说明: 参数选项 解释说明 -p 复制文件时保持源文件的所有者.全县信息及信息属性 -d 如果复制的源文件是富豪链接,那么仅复制符号链接本身,而且保留符号链接所指向的目标文件或目录 -r 递归复制目录,即复制目录下的左右层级的子目录及文件 -a 等同于上面 p.d.r 这3个选项功能的总和 案例一:案

Linux 常用命令sed/awk/grep及正则表达式

linux命令sed和awk sed 主要功能 sed,stream editor.是一个"非交互式"字符流编辑器.输入流通过程序并输出到标准输出端. sed主要用来自动编辑一个或者多个文件(替换,插入,删除,追加,更改) 常见应用 抽区域 匹配正则表达式 比较域 增加,附加,替换 执行过程 sed一次处理一行或多行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区

Linux基础命令---显示文本grep

grep 按照指定的模式,在文件中搜索匹配的行,将结果显示在标准输出.另外还有两个指令egrep相当于grep –E,fgrep相当于grep -F.如果没有给出文件名,那么从标准输入读取. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法      grep [选项]  PATTERN files      grep [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]   2.选项列

linux常用命令详解

linux常用命令 cut命令 例如:cut -d\| -f1,4 xx.txt -d 表示字段分隔符 -f 表示要显示的字段域,如果域之间,(逗号)隔开表示显示对应的单个域,如果用-隔开表示显示连续的域 sort命令 例如:sort -t\| -k2 xx.txt -n 按数值排序 -r 降序 -t 字段分隔符 -k 以哪个字段为关键字进行排序 -u 去重 -f 排序时不区分大小写 uniq命令 注意:使用uniq命令时,一定要先进行排序 -c 显示文件中行重复的次数 -d 只显示重复的行 -

linux常用命令 、查看日志、web排查

linux常用命令 ps aux|grep xxx (比如 ps aux|grep tomcat ps aux|grep tomcat-portalvip ps aux|grep nginx 等) rpm -qa|grep xxx (查找系统有没有安装 比如 rpm -qa|grep mysql rpm -qa|grep MySQL rpm -qa|grep jdk 等) 强制卸载 rpm -e 上一步查找结果的内容 --nodeps 查看端口是否被占用 netstat -an|grep 端口

linux命令-cut

很久之前就不是很系统的学习了linux常用的处理字符的命令.虽然当时学习进展自己也很满意.但是过后又容易忘记. 现在系统的学了linux的shell命令.简单的总结一下: cut顾名思义,用来把目标砍成一段一段的.简单看下用法. cut [-b | -c |  -f ] "数字" -d "seprate" --complement --output-delimiter -b以字节为单位进行分割 -c以字符为单位进行分割 -f以单词为单位进行分割. 说实话,-b-c我