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

  • 第六章:文本处理工具

    • 文本查看命令(cat)
    • 分页查看文件(more)
    • 文本查看上下翻页(less)
    • 显示头部(head)
    • 显示尾部(tail)
    • 按列抽取文本cut
    • 合并文件paste
    • 收集文本统计数据wc
    • 文本排序sort
    • 删除重复uniq
    • 比较文件diff
    • 复制对文件改变patch
    • 文本搜索工具grep
    • egrep 及扩展的正则表达式
    • 作业:

第六章:文本处理工具

文本查看命令(cat)

命令简介:

cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容,类似于下的type命令。 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态

参数:-n或-number:有1开始对所有输出的行数编号; -b或–number-nonblank:和-n相似,只不过对于空白行不编号; -s或–squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; -A:显示不可打印字符,行尾显示“$”; -e:等价于"-vE"选项; -t:等价于"-vT"选项;-E:  显示行结束符$

演示:

[[email protected] ~]# cat 3.txt 1[[email protected] ~]# cat -n 3.txt (-n 选项显示行数编号)1    1[[email protected] ~]# cat > 4.txt <<end(把输入内容追加到文本里面去)> 22> 33> 44> end[[email protected] ~]# cat 4.txt (查看文本信息)223344[[email protected] ~]# tac 4.txt (反过来显示文本信息)443322

分页查看文件(more)

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:

文本查看上下翻页(less)

less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。

显示头部(head)

head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

[[email protected] ~]# head -3 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin

显示尾部(tail)

tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。

[[email protected] ~]# tail -3 /etc/passwdntp:x:38:38::/etc/ntp:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinmageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash

实例: 
有新信息就触发显示屏幕

[[email protected] ~]# tail -n 0 -f /var/log/messages &

按列抽取文本cut

cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于下的type命令

-b:仅显示行中指定直接范围的内容; -c:仅显示行中指定范围的字符; -d:指定字段的分隔符,默认的字段分隔符为“TAB”; -f:显示指定字段的内容; -n:与“-b”选项连用,不分割多字节字符; 

实例: 
显示文件第一例信息

[[email protected] ~]# cat test.txt No Name Mark Percent 01 om 69 91 02 jack 71 87 03 alex 68 98[[email protected] ~]# cut -d" " -f1 test.txt No010203

显示文件前三位和第三位后面的信息

[[email protected] ~]# cat test2.txtabcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz[[email protected] ~]# cut -c1-3 test2.txt abcabcabcabcabc[[email protected] ~]# cut -c3- test2.txt cdefghijklmnopqrstuvwxyz cdefghijklmnopqrstuvwxyz cdefghijklmnopqrstuvwxyz cdefghijklmnopqrstuvwxyz cdefghijklmnopqrstuvwxyz

合并文件paste

paste 合并两个文件同行号的列到一行 
paste命令用于将多个文件按照列队列进行合并。 
语法 
paste(选项)(参数) 
选项 
-d<间隔字符>或–delimiters=<间隔字符>:用指定的间隔字符取代跳格字符; 
-s——serial串列进行而非平行处理。所有行合成一行显示 
实例:

[[email protected] ~]# echo "1" > 3.txt[[email protected] ~]# echo "2" > 4.txt[[email protected] ~]# paste 3.txt 4.txt 1   2[[email protected] ~]# paste 3.txt 4.txt  -d :1:2[[email protected] ~]# paste 3.txt 4.txt  -d +1+2[[email protected] ~]# paste 3.txt 4.txt  -d + |bc3

收集文本统计数据wc

wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。计数单词总数、行总数、字节总数和字符总数

使用 -l 来只计数行数使用 -w 来只计数单词总数使用 -c 来只计数字节总数使用 -m 来只计数字符总数
$ wc story.txt39 237 1901 story.txt

实例:

[[email protected] ~]# wc anaconda-ks.cfg    81  212 2633 anaconda-ks.cfg[[email protected] ~]# wc anaconda-ks.cfg  -l81 anaconda-ks.cfg

文本排序sort

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

语法 
sort(选项)(参数)

选项

-b:忽略每行前面开始出的空格字符; -c:检查文件是否已经按照顺序排序; -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符; -f:排序时,将小写字母视为大写字母; -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; -m:将几个排序号的文件进行合并; -M:将前面3个字母依照月份的缩写进行排序; -n:依照数值的大小排序; -o<输出文件>:将排序后的结果存入制定的文件; -r:以相反的顺序来排序; -t<分隔字符>:指定排序时所用的栏位分隔字符; +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

参数 
文件:指定待排序的文件列表。 
实例:

[[email protected] ~]# cut -d: -f7 /etc/passwd | sort -u |wc -l5

删除重复uniq

uniq 命令:从输入中删除重复的前后相接的行

参数:

-c:  显示每行重复出现 的 次数-d:  仅显示重复过 的 行-u:  仅显示不曾重复 的 行

常和sort 命令一起配合使用:

[[email protected] ~]# sort userlist.txt | uniq -c[[email protected] ~]# cut -d: -f7 /etc/passwd | sort | uniq -c | sort -u      1 /bin/sync      1 /sbin/halt      1 /sbin/shutdown      2 /bin/bash     33 /sbin/nologin

比较文件diff

diff命令在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。

比较两个文件之间的区别

[[email protected] ~]# diff anaconda-ks.cfg aa.txt 5c5< install—> instaii注明第5 行有区别(改变)

复制对文件改变patch

diff 命令的输出被保存在一种叫做“补丁”的文件中

使用 -u 选项来输出“统一的(unified )”diff 格式文件,最适用于补丁文件。 
patch 命令复制在其它文件中进行的改变(要谨慎使用!) 
-i<修补文件>或–input=<修补文件>:读取指定的修补问家你; 
-b或–backup:备份每一个原始文件; 
-u或–unified:把修补数据解译成一致化的差异;

适用 -b 选项来自动备份改变了的文件

$ diff -u foo.conf-broken foo.conf-works > foo.patch$ patch -b foo.conf-broken foo.patch

文本搜索工具grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

参数:

–color=auto:  对匹配到的文本着色显示;-v:  显示不能够被pattern 匹配到的行;-i:  忽略字符大小写-n: : 显示匹配的行号-c:  统计匹配的行数-o:  仅显示匹配到的字符串;-q:  静默模式,不输出任何信息-A #: after,  后#行 行-B #: before,  前#行 行-C # :context,  前后各#行 行-e :实现多个选项间的逻辑or 关系grep –e ‘cat ’ -e ‘dog’ file-w :整行匹配整个单词-E :使用ERE

基本正则表达式:BRE 
扩展正则表达式:ERE 
grep -Eegrep 
元字符分类:字符匹配匹配次数位置锚定分组

基本正则表达式元字符 
字符匹配:

.       匹配任意单个字符;[]      匹配指定范围内的任意单个字符[^]     匹配指定范围外的任意单个字符*       匹配零个或多个字符   # ls *?       匹配任何单个字符    # ls a?~          当前用户家目录~username  用户家目录~+     当前工作目录  # ls ~+~-     前一个工作目录 # ls ~-[0-9]   匹配一个数字范围[a-z]   大写和小写字母[A-Z]   大写字母[wxc]   匹配列表中的任何的一个字符[^wxc]  匹配列表中的所有字符以外的字符

预定义的字符类: :#man 7 glob

    [:digit:] :任意数字,相当于0-9    [:lower:] :任意小写字母    [:upper:]:  任意大写字母    [:alpha:]:  任意大小写字母    [:alnum:] :任意数字或字母    [:space:] :空格    [:punct:] :标点符号

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

*                     匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配.*                    任意长度的任意字符\? :                 匹配其前面的字符0 或1次 次\+ :              匹配其前面的字符至少1次 次\{n\} :         匹配前面 的 字符n次 次\{m,n\} :     匹配前面的字符至少m 次,至多n次 次\{,n\} :        匹配前面的字符至多n次 次\{n,\} :        匹配前面的 字符 至少n次

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

^ :行首锚定,用于模式的最左侧$ :行尾锚定,用于模式的最右侧^PATTERN$:  用于模式匹配整行^$:  空行^[[:space:]]*$  :空白行\< 或 或 \b :词首锚定,用于单词模式的左侧\> 或 或 \b :词尾锚定;用于单词模式的右侧\<PATTERN\>

egrep 及扩展的正则表达式

egrep = grep -E 
egrep [OPTIONS] PATTERN [FILE…] 
扩展正则表达式的元字符: 
字符匹配:

.  任意单个字符[]  指定范围的字符[^]  不在指定范围的字符

次数匹配:

* :匹配前面字符任意次?: 0 或1次 次+ :1 次或多次{m} :匹配m次 次{m,n} :至少m ,至多n次

位置锚定:

^ : 行首$ : 行尾\<, \b : 语首\>, \b : 语尾

分组:

()后向引用:\1, \2, ...或者:a|bC|cat: C 或cat(C|c)at:Cat 或cat

作业:

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

grep -v “/bin/bash$” /etc/passwd

找出/etc/passwd文件中的两位数或三位数

grep "\<[0-9]\{2,3\}\>" /etc/passwd

找出/etc/rc.syslnit或者/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行

grep “^[[:space:]]\+[^[:space:]]” /etc/passwd

找到 “netstat -tan” 命令的结果中以“LISTEN”后跟0,1或多个空白字符结尾的行

netstat -tan | grep “LISTEN[[:space:]]*$”

分组实验:

He loves his lovesHe likes his lovesShe likes her likerShe lover her likergrep "\(l..e).*\1" lover.txt

找出/proc/meminfo文件中,所有以大写或小写S开头的行,三种方式

grep -i “^s” /porc/meminfogrep "^[sS]" /porc/meminfogrep -E "^(s|S)" /porc/meminfo

显示系统上 root,cnetos或者user1用户的相关信息;

grep -E “^(root|centos|user1)\>” /etc/passwd

找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行

grep -E -o "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions

使用echo命令输出一绝对路径,使用egrep取出基名

echo /etc/sysconfig/ | gerp -E -o "[^/]+/?$"

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

grep -E “^([^:]).*\1$” /etc/passwd

取本机ip地址

[[email protected] ~]# ifconfig | grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"  | grep -E -v "255|127.0.0.1"192.168.119.131

取各分区利用率的数值

[[email protected] ~]# df | grep -E "^/dev/sd*" | grep -E -o "[[:digit:]]*[$%]"1%13%29%[[email protected] ~]# df | grep "^/dev/sb*" | tr -s " " ":" |cut -d: -f1,5/dev/sda2:1%/dev/sda3:13%/dev/sda1:29%

统计/etc/init.d/functions 文件中每个单词出现的次数,并按频率从高到低显示

cat /etc/init.d/functions | tr -cs ‘[:alpha:]‘ "\n" | sort |uniq -c|  sort -n -r

/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/” 取目录名

[root@localhost ~]# echo "/etc/rc.d/init.d/functions/" | egrep -o "/.*[^/]" | egrep -o "/.*/"/etc/rc.d/init.d/

正则表达式表示身份证号

echo "ID CARD :41272519940000301x" | egrep -o "\<[1-9][0-9]{5}(19[0-9][0-9]|200[0-9]|201[0-6])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])[0-9]{3}([0-9]|x)\>"

正则表达式表示手机号

echo "Phone number : 18321401988" | egrep -o "\<1(3|5|7|8)[0-9]{9}\>"

正则表达式表示邮箱

echo "is who : zhang132485@163.com" |grep -o "\<[[:alnum:]]\+@[[:alnum:]]\+\.com"

正则表达式表示QQ号

echo "fajfahghjfas 939488549" | egrep -o "\<[1-9][0-9]{4,9}\>
时间: 2024-08-02 11:04:41

实练Linux文本处理工具(上)的相关文章

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 文本处理工具

Linux 文本处理工具 wc 打印行.词.字节的数量 cut 按列切分文本  sort 排序 uniq 消除重复行 wc 打印行.词.字节的数量 语法: wc [OPTION]... [FILE]... 选项: -l:line 统计行数 -w:words 统计单词数 -c:characters 统计字符数 示例: [[email protected] ~]$ cat wctest hello world 123 [[email protected] ~]$ wc -l wctest    #统

Linux文本处理工具——Grep

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

Linux文本处理工具之join,paste

大纲 1.join是什么?有什么作用? 2.join语法格式 3.实战演练 4.引入paste命令 1.join是什么?有什么作用? Linux下最常用的数据文件格式是文本格式的,使用分隔符来区分不同的字段,比如冒号(:).制表符.空格等.像常见的/etc/passwd和 /etc/group两个文件就是用":"来分隔的.这种文本格式我们可以视为文本数据库,既方便人去阅读,也适合程序处理,通常某列类似于数据库中的关键字. join命令就是一个根据关键字合并数据文件的命令(join li

Linux文本处理工具grep

文件查看工具:cat 将[文件]或标准输入组合输出到标准输出. -A, --show-all                                  等于-vET -b, --number-nonblank                           对非空输出行编号 -e                                              等于-vE -E, --show-ends                                 在每行结

正则表达式及linux文本检查工具

一.linux正则表达式之前的三个文本查找命令 grep:(global search regular RE )全面搜索正则表达式并把行打印出来) 相关解释:最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本 名称:print lines matching a pattern是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来 [[email protected] ~]# grep 'root' /etc/passwd root:x:0:0

第七章 linux文本处理工具

文本处理工具 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看 文件查看命令:cat, tac,rev cat [OPTION]... [FILE]... -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非空行编号 -s:压缩连续的空行成一行 tac:行的反向显示 rev:列的反向显示 nl:加行号,空行不加行号. 分页查看文件内容 more: 分页查看文件 more [OPTION

Linux文本处理工具三剑客之grep

Linux家族关于文本处理的工具有三个,他们分别为grep.awk和sed,今天我就介绍一下grep文本处理工具. 首先,什么是grep呢? grep是一种文本搜索工具,基于"pattern"对给定文本进行搜索过滤,并对目标文本进行检查,并打印出符合条件的文本的一款文本处理工具.说到pattern,那么pattern又是什么呢?那就是大家所熟知的"正则表达式". grep家族又有三个成员:grep,egrep和fgrep. grep: 支持正则表达式. egrep: