linux 中的 文本处理工具

文本处理工具

在linux系统中 文本工具有很多 现在具体介绍几款 如 抽取文本的工具 和文件三剑客

文件内容:less和 cat

文件截取:head和tail

按列抽取:cut

按关键字抽取:grep egrep

首先 有 查看文件的cat tac

cat [OPTION]... [FILE]...

-E: 显示行结束符$

-n: 对显示出的每一行进行编号

-A:显示所有控制符

-b:非空行编号

-s:压缩连续的空行成一行

tac 与cat 命令 一样 不过是取反

more: 分页查看文件

more [OPTIONS...] FILE...

-d: 显示翻页及退出提示

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

显示文本前或后行内容

head head [OPTION]... [FILE]...

-c #: 指定获取前#字节

-n #: 指定获取前#行

-#: 指定行数

tail tail [OPTION]... [FILE]...

-c #: 指定获取后#字节

-n #: 指定获取后#行 -#:

-f: 跟踪显示文件新追加的内容,常用日志监控

按列抽取文本cut和合并文件paste

cut [OPTION]... [FILE]...

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

-f FILEDS: #: 第#个字段 #,#[,#]:离散的多个字段,例如1,3,6 #-#:连续的多个字段, 例如1-6 混合使用:1-3,7 -c 按字符切割 --output-delimiter=STRING指定输出分隔符

显示文件或STDIN数据的指定列

cut -d: -f1 /etc/passwd

cat /etc/passwd |cut -d: -f7 cut -c2-5 /usr/share/dict/words

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

paste [OPTION]... [FILE]...

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

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

paste f1 f2 paste  -s f1 f2

还有一些分析文本工具例如 文本数据统计:wc 整理文本:sort 比较文件:diff和patch

可收集文本统计数据wc

计数单词总数、行总数、字节总数和字符总数 可以对文件或STDIN中的数据运行 $ wc story.txt 39 237 1901 story.txt 行数 字数 字符数

-l 来只计数行数

-w 来只计数单词总数

-c 来只计数字节总数

-m 来只计数字符总数

文本排序用到的sort

把整理过的文本显示在STDOUT,不改变原始文件 $ sort [options] file(s)

常用选项

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

-n 执行按数字大小整理

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

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

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

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

uniq的多次性

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

uniq [OPTION]... [FILE]...

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

-d: 仅显示重复过的行;

-u: 仅显示不曾重复的行; 连续且完全相同方为重复 常和sort 命令一起配合使用:sort  userlist.txt  |  uniq -c

比较文件时用到的diff

比较两个文件之间的区别 $ diff foo.conf-broken foo.conf-works 5c5 < use_widgets = no --> use_widgets = yes 注明第5行有区别(改变)

打补丁的patch

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

使用 -u 选项来输出“统一的(unified)”diff格式文 件,最适用于补丁文件。

patch 命令复制在其它文件中进行的改变(要谨慎使用 !)

适用 -b 选项来自动备份改变了的文件 $ diff -u foo.conf-broken foo.conf-works > foo.patch $ patch -b foo.conf-broken foo.patch

最后压轴的 文本处理工具三剑客的 grep 以及它的扩展正则表达式 egrep 其他两剑客分别为 sed 和awk

grep:文本过滤(模式:pattern)工具; grep, egrep, fgrep(不支持正则表达式搜索)

sed:stream editor,文本编辑工具;

awk:Linux上的实现gawk,文本报告生成器

grep: Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式”对目标文 本逐行进行匹配检查;打印匹配到的行; 模式:由正则表达式字符及文本字符所编写的过滤条件

grep [OPTIONS] PATTERN [FILE...]

grep root /etc/passwd grep "$USER"  /etc/passwd

grep ‘$USER‘  /etc/passwd grep `whoami`  /etc/passwd

grep 的命令行有

--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

正则表达式详解

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有 些字符(元字符)不表示字符字面意义,而表示控制或通配 的功能 程序支持:grep, vim, less,nginx等 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep 正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions) 元字符分类:字符匹配、匹配次数、位置锚定、分组

基本正则表达式元字符 字符匹配 匹配次数 和位置锚定以及分组

字符匹配

.   : 匹配任意单个字符;

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

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

[:digit:] 所有数字

[:lower:] 所有小写字母

[:upper:] 所有大写字母

[:alpha:] 所有字母

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

[:punct:] 所有的标点符号

[:space:] 空格和tab

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

*:匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如:\(root\)\+ 分组括号中的模式匹配到的内容会被正则表达式引擎记录 于内部的变量中,这些变量的命名方式为: \1, \2, \3, ... \1: 从左侧起,第一个左括号以及与之匹配右括号之间 的模式所匹配到的字符;

实例: \(string1\+\(string2\)*\) \1: string1\+\(string2\)* \2: string2 后向引用:引用前面的分组括号中的模式所匹配字符(而 非模式本身)

egrep及扩展的正则表达式 与基本正则表达式 差不多 只有少数元字符 变得更加简洁

egrep = grep -E egrep [OPTIONS] PATTERN [FILE...]

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

字符匹配:

. 任意单个字符

[] 指定范围的字符

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

次数匹配:

*:匹配前面字符任意次

?: 0或1次 +:1次或多次

{m}:匹配m次

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

位置锚定:

^  :行首

\<, \b :语首

\>, \b :语尾

分组: () 后向引用:\1, \2, ...

或者: a|b C|cat: C或cat (C|c)at:Cat或cat

正则表达式 为本章重点 个人理解 正则表达式不难 难在 正则表达式的灵活 性 需要利用正则表达式 写出按不同要求的搜索 相对应的 表达式 导致 每个人的方法可能不尽 相同 但结果却一样 这正是 正则表达式的精髓所在 可以自由组合 没有规律可寻 因题而定 还有最最重要的 理解能力

作业

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

grep -i "^s" /proc/meminfo

grep "^[sS]" /proc/meminfo

grep -E "^(s|S)" /proc/meminfo

电脑演示

[[email protected] Desktop]# echo "/etc/sysconfig/" |grep -oE "[^/]+/?$"

sysconfig/

[[email protected] Desktop]# echo "/etc/sysconfig/" |grep -oE "[^/]+/?$"|cut -d/ -f1

sysconfig

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

SwapCached:            0 kB

SwapTotal:       2047996 kB

SwapFree:        2047996 kB

Shmem:              2512 kB

Slab:              87860 kB

SReclaimable:      21188 kB

SUnreclaim:        66672 kB

[[email protected] Desktop]# grep -E ‘^(S|s)‘ /proc/meminfo

SwapCached:            0 kB

SwapTotal:       2047996 kB

SwapFree:        2047996 kB

Shmem:              2512 kB

Slab:              87876 kB

SReclaimable:      21196 kB

SUnreclaim:        66680 kB

[[email protected] Desktop]# grep ‘^]Ss]‘ /proc/meminfo

[[email protected] Desktop]# grep ‘^[Ss]‘ /proc/meminfo

SwapCached:            0 kB

SwapTotal:       2047996 kB

SwapFree:        2047996 kB

Shmem:              2512 kB

Slab:              87860 kB

SReclaimable:      21188 kB

SUnreclaim:        66672 kB

[[email protected] Desktop]#

显示当前系统上tian1 tian2或者tian3用户的相关信息

grep -E "^(tian1|tian2|tian3)\>" /etc/passwd

电脑演示

[[email protected] ~]# cat  /etc/passwd |grep -E "^(tian1|tian2|tian3)\>"

tian1:x:505:505::/home/tian1:/bin/bash

tian2:x:506:506::/home/tian2:/bin/bash

tian3:x:507:507::/home/tian3:/bin/bash

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

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

电脑演示

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

fstab_decode_str()

checkpid()

__readlink()

__fgrep()

__kill_pids_term_kill_checkpids()

__kill_pids_term_kill()

__umount_loop()

__umount_loop_2()

__source_netdevs_fstab()

__source_netdevs_mtab()

__umount_loopback_loop()

__find_mounts()

__pids_var_run()

__pids_pidof()

daemon()

killproc()

pidfileofproc()

pidofproc()

status()

echo_success()

echo_failure()

echo_passed()

echo_warning()

update_boot_stage()

success()

failure()

passed()

warning()

action()

action_silent()

strstr()

confirm()

get_numeric_dev()

is_ignored_file()

is_true()

is_false()

apply_sysctl()

key_is_random()

find_crypto_mount_point()

init_crypto()

[[email protected] ~]#

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

echo /etc/sysconfig/ | grep -E -o "[^/]+/?$" | cut -d/ -f1

电脑演示

[email protected] Desktop]# echo "/etc/sysconfig/" |grep -oE "[^/]+/?$"

sysconfig/

[[email protected] Desktop]# echo "/etc/sysconfig/" |grep -oE "[^/]+/?$"|cut -d/ -f1

sysconfig

[[email protected] Desktop]#

找出ifconfig命令结果中1-255之间的数值

ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

电脑演示

[[email protected] ~]# ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

29

67

46

172

18

16

92

172

18

16

255

255

255

255

64

1

62

120

8

5

1

127

1

255

1

128

1

12

12

[[email protected] ~]#

找出ifconfig命令结果中所有IPv4地址

ifconfig | grep -E -o "(\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.)(\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.){2}\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

电脑演示

[[email protected] ~]# ifconfig | grep -E -o "(\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.)(\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.){2}\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

172.18.16.92

172.18.16.255

255.255.255.0

127.0.0.1

255.0.0.0

找出/etc/passwd文件中用户名同shell名的行

grep -E "^([^:]+\>).*\1$" /etc/passwd

电脑演示

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

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

[[email protected] ~]#

时间: 2024-08-04 23:52:28

linux 中的 文本处理工具的相关文章

&nbsp; &nbsp; linux 中的文本处理工具,grep,egrep

一:grep与egrep简介:                    grep与egrep是在linux中对linux文本搜索用的比较多的一个工具.它结合正则表达式实现与模型匹配的行. 二:语法格式: grep [option]... 'PATTERN' FILE... 支持基本正则表达式                  egrep [option]... 'PATTERN' FILE...支持扩展正则表达式                  [option]常用的主要有:          

Linux中的文本处理工具(二)

一.Linux上文本处理三剑客     grep:文本过滤(模式:pattern)工具;     grep, egrep, fgrep(不支持正则表达式搜索)     sed:stream editor,文本编辑工具:     awk:Linux上的实现gawk,文本报告生成器:   1.grep     grep: Global search REgularexpression and Print out the line.(全球搜索正则表达式,并打印成一行) 作用:文本搜索工具,根据用户指定

Linux中的文本处理工具(一)

本章内容:   一.各种文本工具来查看.分析,统计文本文件   二.grep   三.正则表达式   四.扩展正则表达式   五.Sed 具体内容如下: 一.抽取文本的工具: 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep   1.文件查看命令:cat, tac,rev    cat [OPTION]... [FILE]...        -E: 显示行结束符$        -T:显示Tab键        -v:显示Windows的空格字

Linux中关于文本查看和处理的常用命令

            Linux中关于文本查看和处理的常用命令 一.学习目标         掌握以下命令:             查看文本: cat .tac.more.less.head.tail             文本处理:cut.sort.uniq.wc.tr 二.查看文本命令        cat : 连接并显示文本 cat [options] file,... -n :显示行号 -E :显示结束符$ more :分屏查看文件 space键: 向后翻一屏 b键:向前翻一屏 e

Linux系统中的文本处理工具

在大家刚接触Linux操作系统,首先都会让你了解linux的哲学思想:一切皆文件:那么今天就带大家认识linux中的一些文本查看工具. 1.cat和tac 连接文件并在标准输出上打印:其中cat是正向显示:tac是倒着显示 格式:cat [  options ]... [ FILE ]... 选项: -E filename 能看到行的结束符 -A filename 能看到tab键 回车 -n filename 加行号 -s filename 压缩空行(连续相邻的空行) -b 加行号,但空行不加 

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

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

linux中的文本处理方法集锦

sed awk grep 这三个工具都要用到正则表达式,把常用贴出来. 1.行的匹配 [[email protected] /]# sed -n '2p' /etc/passwd  打印出第2行 [[email protected] /]# sed -n '1,3p' /etc/passwd 打印出第1到第3行 [[email protected] /]# sed -n '$p' /etc/passwd   打印出最后一行 [[email protected] /]# sed -n '/user

Linux 之 awk文本分析工具

AWK是一种处理文本文件的语言,是一个强大的文本分析工具.Linux环境中自带. awk调用方法 命令行 awk [-F field-separator] 'commands' input-file(s) shell脚本方式 #!/bin/sh awk脚本方式 `#!/bin/awk awk -f 脚本文件 待处理文件 原文地址:https://www.cnblogs.com/yoyoyang/p/11822965.html

linux基础--awk文本分析工具详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK