0806文本处理工具


———- 文件查看工具 ———-


cat:    cat [OPTION]… [FILE]…   //查看文本文件内容,一般后面跟文件名(相对路径),或者是文件名(绝对路径)

-n 加行号

-b 加行号,不给空白行加行号

-s 压缩空行,多个空行变一个空行

-T 显示tab\space

-A 显示所有控制符

-E 行尾$显示

        -v 处理Windows文本的M 和 ^      //在Linux中行尾是以$表示,而Windows文本中,行尾是以^M 表示

[root@localhost ~]# ll .bash
.bash_history  .bash_logout   .bash_profile  .bashrc        
[root@localhost ~]# ll .bashrc 
-rw-r--r--. 1 root root 176 Dec 28  2013 .bashrc
[[root@localhost ~]# cat -n .bashrc            //此处为相对路径, 加 -n  每一行行首加行号
     1	# .bashrc
     2	
     3	# User specific aliases and functions
     4	
     5	alias rm='rm -i'
     6	alias cp='cp -i'
     7	alias mv='mv -i'
     8	
     9	# Source global definitions
    10	if [ -f /etc/bashrc ]; then
    11		. /etc/bashrc
    12	fi

tac        tac [OPTION]… [FILE]…     //tac也是一个文本查看功能,功能比较简单,但显示的文本是倒序显示

[root@localhost ~]# tac .bashrc
fi
	. /etc/bashrc
if [ -f /etc/bashrc ]; then
# Source global definitions

alias mv='mv -i'
alias cp='cp -i'
alias rm='rm -i'

# User specific aliases and functions

# .bashrc

rev        rev [options] [file …]            //rev文本查看功能,但文本的每一行是都过来显示的

[root@localhost ~]# rev .bashrc
crhsab. #

snoitcnuf dna sesaila cificeps resU #

'i- mr'=mr saila
'i- pc'=pc saila
'i- vm'=vm saila

snoitinifed labolg ecruoS #
neht ;] crhsab/cte/ f- [ fi
crhsab/cte/ .	
if

分页查看文本工具

more:     more [options] file […]           //分页查看(不可向上翻)文件

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

! : ! command 可执行命令

less:                            //一页一页地查看文本,可以上下翻动,使用man手册查看命令是,就是使用了less查看命令的帮助手册

    Enter键 :下拉一行

    b 键    :向上翻一屏

    space键 :向下翻一屏

    d 键    :向下翻半屏

    w 键    :向上翻半屏

    输入!   :可以执行命令,再敲一下Enter键,继续浏览文本

    输入/   :可以在文本中根据输入的字符进行搜索

head :    head [OPTION]… [FILE]… //  看文件前n行(默认前10行)

     -n #|+#    前#行;若 -n -#显示到文本尾部倒数第n+1行

     -c #     显示前#个字符数,若 -#,文本的最后#个字符不显示出来

    -v        在显示的内容前加文本的名字

tail : tail [OPTION]… [FILE]…   //看文件后10行

-n #|-#    后#行;若 -n +#显示从文本头部第#行开始显示

-c #     指定获取后#字节

-f       监控文件变化,缺点  占用终端资源

& :      有更新就显示,不占用终端资源,后台运行

cut:   cut OPTION… [FILE]…   按列抽取文本

-b 指明分隔符,默认tab

-f FILEDS:

    #: 第#个字段

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

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

    混合使用: 1-3,7

-c 按字符分割

[root@localhost ~]# cat -n /etc/passwd | cut -d: -f1,3 | head    抽取/etc/passwd内容并显示行号;以:为分隔符,选取第1和3列;只显示前10行
     1  root:0
     2	bin:1
     3	daemon:2
     4	adm:3
     5	lp:4
     6	sync:5
     7	shutdown:6
     8	halt:7
     9	mail:8
    10	operator:11

paste  :  paste [OPTION]… [FILE]…      合并两个文件同行号的列到一行

paste [OPTION]… [FILE]…

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

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

paste f1 f2

paste -s f1 f2

———- 文本分析工具 ———-


wc :收集文本统计数据

wc [OPTION]… [FILE]…

    wc [OPTION]… –files0-from=F

[root@localhost testdir]# wc /etc/passwd
  55   99    2732     /etc/passwd
  行数 字节数  字符数

    使用 -l 来只计数行数

    使用 -w 来只计数单词总数

    使用 -c 来只计数字节总数

    使用 -m 来只计数字符总数

sort :文本排序

sort [OPTION]… [FILE]…

sort [OPTION]… –files0-from=F

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

-n 执行按数字大小整理;默认是则是以第一个数字在ASCII表中的大小进行排序

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

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

-t c 选项使用c做为字段界定符        与cut不同,cut以-d设置分隔符,-f指定列,要区分

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

[root@localhost ~]# sort -t: -k3 -n /etc/passwd |head       //以:为分隔符,选取第三列作数字大小(-n)进行排序;与cut不同,cut以-d设置分隔符,-f指定列,要区分
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

uniq :从输入中删除重复的前后相接的行  // 连续且完全相同方为重复

uniq [OPTION]… [FILE]…

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

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

-u: 仅显示不曾重复的行;

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

sort userlist.txt | uniq -c

———- Linux文本处理三剑客之 grep 正则表达式与扩展正则表达式 ———-


正则表达式:


grep  :  Global search REgular expression and Print out the line.作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式字符及文本字符所编写的过滤条件

 grep [OPTIONS] PATTERN [FILE…]

[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep "$USER" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep `whoami` /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

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)

 元字符分类:字符匹配、匹配次数、位置锚定、分组

 man 7 regex

grep中的通配符

字符匹配:

. : 匹配任意单个字符;

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

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

[:digit:]、 [:lower:]、 [:upper:]、 [:alpha:]、 [:alnum:]

、 [:punct:]、 [:space:]

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

*:匹配前面的字符任意次,包括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

原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/30059