Linux文本处理工具grep

  1. 文件查看工具:cat

将[文件]或标准输入组合输出到标准输出。

-A, --show-all                                  等于-vET

-b, --number-nonblank                           对非空输出行编号

-e                                              等于-vE

-E, --show-ends                                 在每行结束处显示"$"

-n, --number                                    对输出的所有行编号

-s, --squeeze-blank                             不输出多行空行

-t                                              与-vT 等价

-T, --show-tabs                                 将跳格字符显示为^I

-u                                              (被忽略)

-v, --show-nonprinting                          使用^ 和M- 引用,除了LFD和 TAB 之外

--help                                     显示此帮助信息并退出

--version                               显示版本信息并退出

2.分页查看文件:more

more [OPTIONS...] FILE... -d: 显示翻页及退出提示

3.单页查看文件:less

查看时有用的命令包括: /文本 搜索 文本 n/N 跳到下一个 或 上一个匹配 less 命令是man命令使用的分页器

4.获取文本前几行:head     -n:指定获取第几行              -c:指定获取多少字节

5.获取文件后几行:tail     -n:指定获取第几行              -c:指定获取多少字节

6.文件分割工具:cut

-d DELIMITER: 指明分隔符,默认tab 例如:-d":"

-f 指定获取字段:

#: 第#个字段

#,#[,#]:离散的多个字段,例如1,3,6

#-#:连续的多个字段, 例如1-6

混合使用:1-3,7 -c

按字符切割 --output-delimiter=STRING指定输出分隔符

例如;我们要获取/etc/passwd下面的用户名以及uid和shell类型??

                 [[email protected] ~]# cat /etc/passwd | cut -d: -f1,3,7

7.合并工具:paste

合并两个文件同行号的列到一行

-d 分隔符:指定分隔符,默认用TAB

-s : 所有行合成一行显示

            [[email protected] ~]# paste -s luyubo.txt luyubo1.txt

8.文本统计工具:wc

wc可以用来统计单词总数,行总数,以及字节总数,字符总数。

用法:wc [选项]... [文件]...

               或:wc [选项]... --files0-from=F

输出每个指定文件的行数、单词计数和字节数,如果指定了多于一个文件,继续给出所有相关数据的总计。如果没有指定文件,或者文件为"-",则从标准输入读取数据。

-c, --bytes输出字节数统计

-m, --chars输出字符数统计

-l, --lines输出行数统计

--files0-from=文件从指定文件读取以NUL 终止的名称,如果该文件被

指定为"-"则从标准输入读文件名

-L, --max-line-length         显示最长行的长度

-w, --words显示单词计数

9.文本排序工具:sort

我们这里列出几个常用的几个选项

-r 执行反方向(由上至下)整理

-n 执行按数字大小整理

-f 选项忽略(fold)字符串中的字符大小写

-u 选项(独特,unique)删除输出中的重复行

-t  c 选项使用c做为字段界定符

-k  X 选项按照使用c字符分隔的X列来整理能够使用多次

10.统计重复次数:uniq

-c: 显示每行重复出现的次数

-d: 仅显示重复过的行

-u: 仅显示不曾重复的行 连续且完全相同方为重复

#一般配合sort使用。soft luyubo.txt | uniq -c

Linux文本处理三剑客之一——grep

grep就像是一个筛选器一样。功能有多强大,就看我们怎么去灵活的使用,结合正则表达式。

用法: grep [选项]... PATTERN [FILE]...

在每个 FILE 或是标准输入中查找 PATTERN。

默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。

例如: grep -i ‘hello world‘ menu.h main.c

正则表达式选择与解释:

-E: --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)

-F: --fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。

-G: --basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)

-P: --perl-regexp         PATTERN 是一个 Perl 正则表达式

-e: --regexp=PATTERN      用 PATTERN 来进行匹配操作

-f: --file=FILE           从 FILE 中取得 PATTERN

-i: --ignore-case         忽略大小写

-w: --word-regexp         强制 PATTERN 仅完全匹配字词

-x: --line-regexp         强制 PATTERN 仅完全匹配一行

-z: --null-data           一个 0 字节的数据行,但不是空行

-v: --invert-match        显示不能够被pattern匹配到的行;

-q: --quiet               静默模式,不输出任何信息

-o: --only-matching       仅显示匹配到的字符串;

-c: --count               统计匹配的行数

-n: --line-numbe          显示匹配的行号

-A #:--after-context=NUM   after, 后#行

-B #:--before-context=NUM  before, 前#行

-C #:--context=NUM        前后各#行

输出控制:

-m: --max-count=NUM       NUM 次匹配后停止

-b: --byte-offset         输出的同时打印字节偏移

-n: --line-number         输出的同时打印行号

--line-buffered       每行输出清空

-H: --with-filename       为每一匹配项打印文件名

-h: --no-filename         输出时不显示文件名前缀

--label=LABEL         将LABEL 作为标准输入文件名前缀文件控制:

-B: --before-context=NUM  打印以文本起始的NUM 行

-A: --after-context=NUM   打印以文本结尾的NUM 行

-C: --context=NUM         打印输出文本NUM 行

正则表达式(REGEXP):由一类特殊字符及文本字符所编写的模式,其中有 些字符(元字符)不表示字符字面意义,而表示控制或通配 的功能

正则表达式分为两类:

基本正则表达式:BRE

扩展正常表达式:ERE            grep -E   -egrep

正则表达式引擎:

采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions)

元字符分类:字符匹配、匹配次数、位置锚定、分组      这里我理解为正则里面功能分支

基本正则表达式元字符:

.   : 匹配任意单个字符;

[]  : 匹配指定范围内的任意单个字符

[^] :匹配指定范围外的任意单个字符

^ 行首

$ 行尾

. 任意单一字符

[] []内任意单一字符

[^] 除[]内任意单一字符

* *前面字符重复不确定次数

\+ \+前面字符重复一次以上不确定次数

\? ?前面字符重复0或1次

\ 转义符

.* 任意长度字符

\{n\} 前面字符重复n次

\{n,\} 前面字符重复n次以上

\{m,n\} 前面字符重复m次和n次之间

[:alpha:] 所有字母,包括大、小写

[:alnum:] 所有字母和数字

[:upper:] 所有大写字母

[:lower:] 所有小写字母

[:digit:] 所有数字

[:punct:] 所有标点符号

[:space:] 空格和Tab

正则表达式:

匹配次数:用在要指定次数的字符后面,用于指定前面的字 符要出现的次数

*:匹配前面的字符任意次,包括0次

贪婪模式:尽可能长的匹配

.*:任意长度的任意字符

\?:匹配其前面的字符0或1次

\+:匹配其前面的字符至少1次

\{n\}:匹配前面的字符n次

\{m,n\}:匹配前面的字符至少m次,至多n次

\{,n\}:匹配前面的字符至多n次

\{n,\}:匹配前面的字符至少n次

位置锚定:定位出现的位置

^:行首锚定,用于模式的最左侧

$:行尾锚定,用于模式的最右侧

^PATTERN$: 用于模式匹配整行

^$: 空行

^[[:space:]]*$ :空白行

\< 或 \b:词首锚定,用于单词模式的左侧

\> 或 \b:词尾锚定;用于单词模式的右侧

\<PATTERN\>:匹配整个单词

分组表示:

\(\):将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录 于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...

\1: 从左侧起,第一个左括号以及与之匹配右括号之间 的模式所匹配到的字符

实例:

\(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

后向引用:引用前面的分组括号中的模式所匹配字符(而 非模式本身)

扩展正则表达式

#扩展表达式支持一些新的语法。

egrep = grep -E

扩展正则表达式的元字符:

字符匹配:

.  任意单个字符

[] 指定范围的字符

[^] 不在指定范围的字符

次数匹配:

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次

位置锚定:

^  :行首

$  :行尾

\<, \b :语首

\>, \b :语尾

分组:

() 后向引用:\1, \2, …

或者:

a|b

C|cat: C或cat

(C|c)at:Cat或cat

案例练习题:

1、找出ifconfig命令结果中本机的所有IPv4地址

[[email protected] ~]# ifconfig | tr -s " " |head -2 | tail -1 |cut -d: -f2 | cut -d" " -f1

2、查出分区空间使用率的最大百分比值

[[email protected] ~]# df -h | tr -s " " |cut -d" " -f5 | sort -n

3、查出用户UID最大值的用户名、UID及shell类型

[[email protected] ~]# cat /etc/passwd | cut -d: -f1,3,7 /etc/passwd |sort -n -t: -k2| tail -1

4、查出/tmp的权限,以数字方式显示 ?

[[email protected] ~]# stat /tmp/ | tr -s " " |head -4 | tail -1| cut -d/ -f1 | cut -d"(" -f2

5、统计当前连接本机的每个远程主机IP的连接数,并按从大 到小排序

[[email protected] ~]# netstat -net |tr -s " " | cut -d" " -f5 |cut -d":" -f1 |uniq -c

6、显示/proc/meminfo文件中以大小s开头的行;(要求:使 用两种方式)

[[email protected] ~]# grep -i ^s /proc/meminfo

[[email protected] ~]# grep  "^[s|S]" /proc/meminfo

7、显示/etc/passwd文件中不以/bin/bash结尾的行

[[email protected] ~]# grep -v "/bin/bash" /etc/passwd

8、显示用户rpc默认的shell程序

[[email protected] ~]# grep "\<rpc" /etc/passwd -w |cut -d: -f7

9、找出/etc/passwd中的两位或三位数

[[email protected] ~]# grep "[0-9][0-9][0-9]\?" /etc/passwd
[[email protected] ~]#  grep "\<[0-9]\{2,3\}\>" /etc/passwd

10、显示/etc/grub2.cfg文件中,至少以一个空白字符开头的 且后面存非空白字符的行

[[email protected] ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

11、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多 个空白字符结尾的行

[[email protected] ~]# netstat -tan | grep "LISTEN[[:space:]]*$"

12、添加用户bash、testbash、basher以及nologin(其shell为 /sbin/nologin),而后找出/etc/passwd文件中用户名同shell名 的行

[[email protected] ~]# grep "^\([^:]\+\>\).*\<\1\>$" /etc/passwd

13、显示三个用户root、mage、wang的UID和默认shell

[[email protected] ~]# grep -E "^(root|mage|wang)\b" /etc/passwd |cut -d: -f1,3,7

14、找出/etc/rc.d/init.d/functions文件中行首为某单词(包 括下划线)后面跟一个小括号的行

[[email protected] ~]# grep -E "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions -o

15、使用egrep取出/etc/rc.d/init.d/functions中其基名

[[email protected] ~]# echo "/etc/sysconfig/network-scripts/ifcfg-eth0/" | grep -E "[^/]+/?$" -o |grep -E [^/]+ -o

16、使用egrep取出上面路径的目录名

[[email protected] ~]# echo "/etc/sysconfig/network-scripts/ifcfg-eno16777736/" | grep -E -o "^/.*[^/]" |grep -E -o "^/.*/"

17、统计以root身份登录的每个远程主机IP地址的登录次数

[[email protected] ~]# last |tr -s " "|cut -d" " -f1,3 |grep "^root [[:digit:]]" |sort -n|uniq -c

18、利用扩展正则表达式分别表示0-9、10-99、100-199、 200-249、250-255

[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

19、显示ifconfig命令结果中所有IPv4地址

[[email protected] ~]# ifconfig |grep -E "(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
时间: 2025-01-31 04:04:13

Linux文本处理工具grep的相关文章

Linux文本处理工具——Grep

Grep简介 全名:Global search Regular expression and Print out the line. 功能:文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行. Linux的三大文本处理工具之一,可以说学好grep命令无疑是重要的,可以说学好grep也是不容易的,因为grep里面要用到最烦人的正则表达式. grep语法格式 grep [option]... 'PATTERN' FILE... [option]:表示可以跟选项,

Linux基础之文本处理工具grep及正则表达式(附带egrep与grep的不同)

文本处理工具grep,正则表达式在Linux学习过程中很容易出现困惑与障碍的地方,这里分享下学习这方面内容的一些感受. grep Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的'模式(过滤条件)'对目标文本逐行进行匹配检查:打印匹配到的行: '模式':由正则表达式的元字符及文本字符所编写出的过滤条件. grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS]

Linux中文本搜索工具“grep”命令详解

人生中应该有两次冲动,一次是轰轰烈烈的爱情,一次是说走就走的旅行.我属于第三种,轰轰烈烈的辞职然后马不停蹄的参加了马哥的linux面授班,两周时间内对linux有了些初步的了解,与此同时,两周内八天课程中的各种定义.概念.原理.命令由于量大.琐碎,也着实给我们这些小白一个下马威,即使每天11点撤退也觉得时间不够用.鉴于对自己的负责和马哥的作业要求,特对文本搜索工具grep写些使用指南,其中可能会有描述不确切或有偏颇之处,望及时指正. 开始--. 首先,要说一下grep是什么,用在什么地方. gr

Linux学习汇总——Linux用户组管理,文件权限管理,文本处理工具grep及egrep

本章Blog相关Linux相关知识点 解析:在数据库按搜索码查找相对应的条目,并找与之对应额外的其他数据库的过程:名称解析:UID ,组名解析:GID 数据库:文本文件,sql数据库,ldap数据库,用户库:/etc/passwd ,密码库 :/etc/shadow,组库:/etc/group,组密码库:/etc/gshadow 加密方法:对称加密--加密和解密使用同一个密码,如DES,AES :公钥加密--每个密码都成对出现,一个公钥,一个私钥,如DSA,RSA:单向加密--常用于数据完整性校

15.自学Linux之路:文本处理工具grep,eprep和fgrep

文本处理工具grep,eprep和fgrep: grep:(global search regular expression and print out the line),全面搜索正则表达式,并显示相应的行 文本搜索工具:根据用户指定的文本模式对目标文件逐行搜索,显示能够被模式匹配的行 格式:grep  [options]  'PATTERN'  file,.....    文本过滤器 --color=auto:将匹配到的模式加上颜色 例:#grep  --color=auto  Boot  

linux文本处理工具

linux文本处理工具 1.Linux 文件系统上的特殊权限: SUID     SGID   Sticky 进程的安全上下文:(1)任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行去权限 (2)启动为进程后,其属主为发起者,属组为发起者所属的组 (3)进程访文件的权限,取决于进程的发起者 (a)  进程的发起者,同文件的属主:则应用文件属主权限                                            (b)  进程的发起者,属于文件属组:则

Linux文本处理工具AWK使用解析

在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk. awk  option  'pattern'  file -F    指定分隔符: -v     申明自定义变量: 查看当前系统上,用户名和用户shell,输出分隔符为~. # awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end===

linux文本处理三剑客—grep

cat:concatenate 文本文件查看工具 cat [option] filename... -n:给显示出来的文本行加上编号 -b:非空行编号 -V:显示 ^ -E:显示行结束符$ -T:显示制表符 -A:显示所有控制符-A=-VET -s:压缩连续的空行成一行 如:cat /etc/fstab /etc/passwd 同时查看多个文件 df | cut -d: tac:文本文件查看工具 用法同cat 只是文件内容的行逆序显示 rec:文本文件查看工具    用法同cat 只是文本文件每

实练Linux文本处理工具(上)

第六章:文本处理工具 文本查看命令(cat) 分页查看文件(more) 文本查看上下翻页(less) 显示头部(head) 显示尾部(tail) 按列抽取文本cut 合并文件paste 收集文本统计数据wc 文本排序sort 删除重复uniq 比较文件diff 复制对文件改变patch 文本搜索工具grep egrep 及扩展的正则表达式 作业: 第六章:文本处理工具 文本查看命令(cat) 命令简介: cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命