天天看点

Linux——文本处理工具及正则表达式

cat:文件查看

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

        -E:-E: 显示行结束符$

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

        -A:显示所有控制符

        -b:非空行编号

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

more:分页查看文件

    more [OPTIONS...] FILE...

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

less:一页一页地查看文件或STDIN输出

    查看时有用的命令包括:

        /文本搜索文本

        n/N跳到下一个或上一个匹配

less  命令是man命令使用的分页器

head:显示文本前n行

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

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

        -n #: 指定获取前#行

        -#:指定行数

tail:显示文本后n行

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

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

        -n #: 指定获取后#行

        -#:

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

cut:显示文件或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

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

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

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

        -d: 仅显示重复过的行

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

        连续且完全相同方为重复

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

        sort userlist.txt | uniq-c

sort:文本排列

    -n 按数字排列

    -r 倒序排列,默认升序

    -t 指定分隔符

    -k 指定哪一列

    -f 忽略大小写

    -u 删除重复行

diff :比较

    diff f1 f2 比较两个文件的不同之处

    diff -u f1 f2 > diff.log

    rm -f f2

    patch -b f1 diff.log

    mv f1 f2

    mv f1.orig f1

grep:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行

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

    grep [OPTIONS] PATTERN [FILE...]

        grep root /etc/passwd

        grep "$USER" /etc/passwd

        grep '$USER' /etc/passwd

        grep `whoami` /etc/passwd

        --color=auto 关键字高亮显示

        -v 反向搜索

        -i 忽略大小写

        -n 显示行号

        -c 不显示搜索结果,仅显示匹配的行数

        -o 仅显示匹配到的字符串

        -q 静默输出

        -A #  显示搜索行及其向下相临的#行

        -B #  显示搜索行及其向上相临的#行

        -C #  显示搜索行及其向上和向下相临的#行

        -e char1 -e char2 [-e charN] 多个选项间or关系

        -w 匹配整个单词

        -E 或egrep 支持扩展正则表达式

        -F 或fgrep 不支持正则表达式

正则表达式

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

程序支持:grep,sed,awk,vim, less,nginx,varnish等

分类:

    基本正则表达式:BRE

    扩展正则表达式:ERE

        grep -E,egrep

正则表达式引擎:

    采用不同算法,检查处理正则表达式的软件模块

    PCRE(Perl Compatible Regular Expressions)

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

man 7 regex

基本正则表达式元字符

字符匹配:

    . 匹配任意单个字符

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

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

    [:alnum:] 字母和数字

    [:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z

    [:lower:] 小写字母[:upper:] 大写字母

    [:blank:] 空白字符(空格和制表符)

    [:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)

    [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

    [:digit:] 十进制数字[:xdigit:]十六进制数字

    [:graph:] 可打印的非空白字符

    [:print:] 可打印字符

    [:punct:] 标点符号

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

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

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

或者:\|

示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat

Linux——文本处理工具及正则表达式

egrep及扩展的正则表达式

egrep= grep -E

    egrep[OPTIONS] PATTERN [FILE...]

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

    次数匹配:

        *:匹配前面字符任意次

        ?: 0或1次

        +:1次或多次

        {m}:匹配m次

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

    位置锚定:

        ^ :行首

        $ :行尾

        \<, \b :语首

        \>, \b :语尾

    分组:

        ()

        后向引用:\1, \2, ...

    或者:

        a|b: a或b

        C|cat: C或cat

        (C|c)at:Cat或cat

字符匹配:

    . 任意单个字符

    [] 指定范围的字符

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

继续阅读