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

   2016-12-01 0
核心提示:一、*各种文本处理工具1.1抽取文本的工具1.1.1cat、less查看文本内容more、less和cat【选项】【文件】cat–n,-d列行,-A:显示所有看不见的符号(控制符),-E:显示结尾$;-s:压缩连续空行为一行more –d:显示翻页及退出提示less:一页一页查看文件或标准

一、 * 各种文本 处理工具

1.1 抽取 文本的工具

1.1. 1  cat less 查看文本 内容

more less cat 【选项   【文件

cat    –n -d 列行   -A 显示 所有看不见的符号 控制符)

-E :显示结尾 $ -s :压缩连续 空行 为一行

more  –d 显示 翻页及退出提示

less :一页一页查看文件或标准输出

/ 文本 :搜索文本      n/N 跳到下一个   上一个匹配

1.1. 2  head tail 文件 截取

head tail   【选项   【文件

head –c # 指定获取前 # 个字节      -n # -# :指定获取前 #

tail –c # :指定获取 # 字节    -n # -# :指定获取后 #

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

例如: tail  –n0 –f f2 &   后台显示 跟踪日志    fg 1 打断

1.1. 3  cut paste 按列抽取

cut paste   合并文件: 【选项   【文件

cut    d 指明 分隔符,默认为 tab 常与 -f 一起 使用 -c 按字符切割

-f # :第 # 个字段   f # # :离散的多个 字段,例如 1 3 6

-f #-# :连续的多个字段,例如 1 -5   混合使用: 1 -3 7

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

-d 指明分隔符,默认为 tab -s 所有 行合成为一行显示

paste  f1  f2    paste  –s  f1   f 2

1.1. 4   wc sort 分析 文本的工具

wc sort diff patch

文本 数据统计:

wc  – l :统计行    -w :统计单词总数    -c :统计字节数

文本 排序: sort 【选项   files

sort  -r 执行 反方向 由上至下 整理   -n :执行按数字大小 整理

-f :忽略字符 中的字符大小写       -u :删除输出中的重复行

-t c :选项用 c 作为字符界定符    -k X c 字符分隔的 X 列整理    常用 -t -k 一起使用排序

1.1.5 uniq 文本压缩 工具

uniq   选项】   file

uniq –c :显示每行重复出现的次数     -d :仅显示重复过的行

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

常与 sort 命令一起使用   sort userlist.txt | uniq -c

1.1.6 diff patch 比较 文件 的区别

例如  $    diff   foo.conf-broken  foo.conf-works

输出 结果为: 5 c5   :第 5 有改变

<   use _widgets =no        >  use_widgets =yes

diff 命令的输出被保存在一种叫做 补丁 文件中;使用

diff  -u :输出 统一的( unified ”diff 格式文件,最适用于补丁文件。

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

patch  -d :自动备份改变了的文件  

例如:   $ diff     u  foo.conf-broken  foo.conf-works > foo.patch

$ patch  -b  foo.conf-broken  foo.patch

reset :重置,重生成

二、 Linux 文本 处理三剑客

    grep sed awk

sed stream editor ,文本编辑工具

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

grep :文本过滤 模式: pattern 工具

2.1 grep 文本过滤 工具

grep:Grobal search Regular expression and Print out the line

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

grep   【选项 pattern   file

-n 搜索 并显示所在 文本 内容的行号     o 只显示 匹配到的字符   i 忽略 字符的大小写

v 只显示 不能被 pattern 匹配 的行     e :表示或者 实现多个逻辑关系如 grep –e “cat” –e “ls” file

-c 计算查找 字符串 的次数      A # after ,后 #    -B # before #    -C context ,前后 #

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

通配的功能 程序支持: grep vim less nginx

正则表达式 引擎 man  7 regex

采用 不同的算法,检查出路正则表达式的软件模块 PCRE Per l  Compatible Regular Expressions

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

2.1.1 字符匹配(文本 内容)                       

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

[ ^ ] 匹配指定范围外的 任意 单个字符        [^/]+/?$ 取基名

2.1.2 匹配 多次

* 匹配 符号 * 前面 字符任意次,包括 0 次    .* :匹配 任意长度的任意字符 不包括:等特殊符号

\? :匹配 前面的字符 0 或者 1 次           \+ :匹配 前面的字符至少 1

gooo*gle 相当于 goo\+gle

\{ n\ } :匹配前面的字符 n                  \{m,n\} :匹配 前面的字符【 m n

\{1,\} 相当于 \+

2.1.3 位置 锚定

^ 行首锚定(开头的行)        $ 行尾锚定( 结尾 的行)      ^$ 空行    ^[[:space:]]*$ 空白行

\< 单词限定词首          \> 单词限定词尾              \<pattern\> 匹配整个单词

分组: \(\) 一个或多个 字符 捆绑在一起

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

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

实例: \(string1\+\(string2\)*\)    (\1|\2   )          \1: string1\+\(string2\)*         \2: string2

后向引用:引用前面的分组括号中的模式所匹配字符  : \(r..t) .*\(r..t\)    \(r..t).*\1    不同的

字母字符 串后面 如果 有数字和下划线 那就 锚定不了

转义: \ . 表示 . 字符 ,而不是代表任意字符

三、 * 正则 表达式

egrep 及扩展的正则表达式   grep 功能 差不多 ,就是正则表达式少了 \

或者   a|b a 或者 b       C | cat C 或者 cat      C |c at Cat 或者 cat

3.1 文件名 通配符

* 匹配零个或多个字符    ? 匹配任何单个字符    ~ 当前用户家目录   ~mage 用户 mage 家目录

~+ 当前工作目录  ~ —:   前一个工作目录

[0-9] 匹配数字范围    [a-z] :字母     [A-Z] :字母     [wang] 匹配列表中的任何的一个字符

v [^wang]   匹配列表中的所有字符以外的字符

预定义的字符类: #man 7 glob )帮助文件

[:digit:] :任意数字,相当于 0-9      [:lower:] :任意小写字母

[:upper:]:   任意大写字母             [:alpha:]:   任意大小写字母

[:alnum:] :任意数字 或字        [:blank:] :水平空白字符        [:space:] 水平或垂直的空白字符

四、 *sed 行编辑器

sed 介绍、 sed 用法、 sed 高级用法

stream EDitor,   行编辑器 ,自带一些编程语言 ,可以直接对文件修改,故一般用管道传递给 sed

v    sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space ),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。 Sed 主要用来自动编辑一个或多个文件 , 简化对文件的反复操作 , 编写转换程序等。

用法: sed  [option] …  'script'  inputfile…   支持正则表达式

4.1 常用选项

-n :不输出模式空 间内容到屏幕,即不自动打印    -e:   多点编 辑;多次编辑

-f / PATH/SCRIPT_FILE :   从指定文件中读取编辑脚本

-r:   支持使用扩展正则表达式      -i:    原处编辑,直接修改建议 -i.bak ,先备份 .bak 后 (显示修改的内容,修改                                                                                             前的内容在file.bak 中)

4.2 script ' 地址命令 '

地址定界: (一般加上 -n ,要不然显示 2 遍)

(1)   不给地址:对全文进行处理

(2)   单地址:   #:   指定的行     ;    /pattern/ :被此处模式所能够匹配到的每一行

(3)   地址范围:

#1,#2 :从第 #1 行到 #2 行  ;   #,+#     ;   /pat1/,/pat2/ :匹配到 part1 part2 之间的行显示

#,/pat1/ :匹配第 # 行到匹配 part 之间行的显示

~ :步进   1~2   显示奇数行     2~2    显示偶数行

4.3 编辑命令

script    地址定界用在 script

d:   删除模式空间匹配的行;    例如:   d 删除有空格的行 ,也可以用全局替换

p:   显示模式空间中的内容 , -n 10P :仅显示第 10 行,相当于 head -10|tail -1

(没有 -n 的话,模式空间所有的文本都显示, 10 行出现 2 次);

a [\]text   :在指定行 后面追加文本  \n ,可以追加两行至几行 ;支持 使用 \n 实现多行追加  

cat -n /etc/passwd | sed 10a\wwwww\nrrrrrr   显示 /ect/passwd 文本,并在第 10 行后面插入 wwwww   两行

i [\]text :在行前面 插入文本          ;与上述差不多不过是第 10 行行前插入。            rrrrr

c [\]text :替换行为单行或多行文本     ;与上述差不多不过是替换第 10 行插入。

w  /path/somefile:   保存模式匹配的行至指定文件

cat -n /etc/passwd | sed 10 15w  f2 显示 /etc/passwd 内容,但是把 10-15 行的内容写到 f2 中去。

r /path/somefile :读取指定文件的文本至模式空间中匹配到的行后面

cat -n /etc/passwd | sed 10 15r  f2 显示 /etc/passwd 内容 ,并在 10-15 行每一行后面插入显示 f2 的内容。

cat -n /etc/passwd | sed  -n 10 15r  f2 ,仅显示 /etc/passwd 文本 10-15 行每行后面插入显示 f2 的文本内容。

=:   为模式空间中的行打印行号  ; cat f1 |sed -n '/root/=' 仅显示 f1 文本中含有 root 的行号

cat f1 |sed  '/root/='   显示 f1 文本内容 ,并在 root 所在行上面显示行号

!: 模式空间中匹配行取反处理    ; cat f1 |sed -n '/root/ =' 仅显示 f1 文本中不含有 root 的行号

cat f1 |sed  '/root/ ='   显示 f1 不含有 root 行的文本内容 ,并在显示的所在行上面显示行号

4.4 查找替换

s/// :查找替换 , 支持使用其它分隔符, s@@@ s###   (不支持编辑命令)

cat  /etc/passwd | sed   s/root/ROOT/ :把 /etc/passwd 文本中每一行第一个匹配到的 root 替换为 ROOT

v  替换标记:   g:   行内全局替换  ; p:   显示替换成功的行

w  /PATH/TO/SOMEFILE :将替换成功的行保存至文件中

4.5 sed 普通命令示例

sed 2p /etc/passwd     显示 /etc/passwd 所有内容,并再打印第二行显示

v sed n 2p /etc/passwd    仅显示 /etc/passwd 文本第 2 行的内容

v sed n 1,4p /etc/passwd    仅显示 /etc/passwd 文本第 1-4 行的内容

v sed n /root/p /etc/passwd   仅显示 /etc/passwd 文本含有 root 行的内容

v sed n 2,/root/p /etc/passwd   仅显示 /etc/passwd 文本从第 2 行随后第一个匹配到 root 的行

v sed  -n /^$/= file                仅显示 file 文本空行行号

v sed n e /^$/p ’ – e /^$/= file   仅显示空白行和空白行号

v sed /root/a\superman /etc/passwd 行后  在 /etc/passwd 文本含有 root 的行行后显示 superman

v sed /root/i\superman /etc/passwd   行前   在 /etc/passwd 文本含有 root 的行行后显示 superman

v sed /root/c\superman /etc/passwd   代替行   在 /etc/passwd 文本含有 root 的行替换为 superman

v sed /^$/d file      显示 file 中的非空白行

v sed 1,10d file     显示 file 文本中除 1-10 行的所有的行

v nl  /etc/passwd | sed 2,5d ’  显示 /etc/passwd 文本中除 2-5 行外所有的行和行号

v nl  /etc/passwd | sed 2a tea ’  显示 /etc/passwd 文本中所有行号及文本,并在第 2 行后插入 tea

v sed  's/test/mytest/g'  file        替换 file 文本中 test mytest

sed -n s/root/&superman/p /etc/passwd 单词后:仅显示 /etc/passwd 文本中 root 的行并把 root 替换为 rootsuperman

sed -n s/root/superman&/p /etc/passwd 单词前:仅显示 /etc/passwd 文本中 root 的行并把 root 替换为 supermanroot

v sed  -e s/dog/cat/ -e s/hi/lo/ pets   pets 文本每一行第一个匹配的 dog 换成 cat hi 换成 lo

v sed  -i.bak s/dog/cat/g pets    备份 pets 文本为 pets.bak ,并把 pets 文本中 dog 全部替换成 cat 显示出来

4.6 sed 工具   

v  高级编辑命令:(模式空间,保持空间)

h:   把模式空间中的内容覆盖至保持空间中

H :把模式空间中的内容追加至保持空间中

g:   从保持空间取出数据覆盖至模式空间

G :从保持空间取出内容追加至模式空间

x:   把模式空间中的内容与保持空间中的内容进行互换

n:   读取匹配到的行的下一行 覆盖 至模式空间

N :读取匹配 到的行的 下一行 追加 至 模式空间

d:   删除模式空间中的行

D :删除 当前模式空间开端至 \n 的内容 ( 不再传 至标准输出),放弃之后的命令,但是对剩余模式空间重新执行 sed

4.7 sed 高级编辑命令示例

v sed -n 'n;p' FILE   仅显示 file 的偶数行

v sed '1!G;h;$!d' FILE   file 文本倒叙显示 相当于 tac file

v sed '$!N;$!D' FILE   显示 file 文本最后 2 行 相当于 tail -2

v sed '$!d' FILE   仅显示 file 文本最后 1 行 相当于 tail -1

v sed G FILE   保持模式先为空的 ;追加到模式空间 ;就会形成模式空间每行之间有空格,再显示出来

v sed g FILE    保持模式先为空的 ;覆盖模式空间 ;就会形成模式空间都为空格,再显示出来一片空白

v sed /^$/d;G FILE 显示除空格之外的偶数行

v sed 'n;d' FILE   仅显示奇数行

 
标签: 正则表达式 Sed
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • linux sed命令中的正则表达式问号、加号、圆括
    linux sed命令内的正则表达式语法分两种,一种叫Basic (BRE) Syntax,另一种叫Extended (ERE) Syntax。默认使用的是BRE。这个BRE就是一个简化版,语法稍微有点不一样,问号、加号、圆括号、花括号和竖线没有特殊含义,就代表字符本身,如果要原本定义的实现特
    02-09
  • grep正则表达式及sort、diff等相关命令
    Linux文本处理三剑客:grep:文本过滤工具(模式:patter)sed:stream editor 流编辑器,文本编辑工具awk:linux上的实现gawk,文本报告生成器(格式化文本)* 正则表达式:Regular Expression,REGEXP,由一类特殊字符及文本字符所编写的模式,其中有些字符
  • GNU Sed 4.3发布,正则表达式提速10倍
    昨天GNU Sed发布了最新版4.3,号称正则表达式提速10倍,并优化了非阻塞IO性能。具体更新内容请看http://lists.gnu.org/archive/html/info-gnu/2017-01/msg00000.html下载请前往软件主页https://www.gnu.org/software/sed/流编辑器 是用来从文件读取文本或者从
  • 正则表达式和文本处理工具grep,egrep
    正则表达式(Regular Expression)是通过一些特殊字符的排列,来表示控制或者通配的功能,用于查找,替换,删除一行或者多行文字字符串,是用在字符处理上的一项表达式,有时候我们可通过表达式来筛选出我们所需要的信息。正则表达式分为两类:基本正则表达式
  • 第七章 Shell正则表达式
    正则表达式在每种语言中都会有,目的就是匹配符合你预期要求的字符串。7.1 Shell正则表达式基础正则表达式:BRE(basic regular express)扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和()符号描述示例.匹配除换行符(\n)之外的任意
  • week4:grep命令正则表达式的应用
    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限;~]# cp -r /etc/skel/ /home/tuser1 |chmod -R g-rwx,o-rwx /home/tuser12.编辑/etc/group文件,添加组hadoop;~]# echo hadoop:x:2016: /etc/group3.手
  • grep命令与正则表达式的应用示例、find命令应用示例
    grep命令与正则表达式的应用示例、find命令应用
    grep命令与正则表达式的应用示例、find命令应用示例显示当前系统上root、fedora或user1用户的默认shell。 使用扩展正则表达式,它支持使用A|B表示或者之意。查看用户的默认shell,cat /etc/passwd文件,根据用户名所处位置进行锚定,其最后一个字段即表示该用
  • Linux Shell编程-正则表达式
    Linux Shell编程-正则表达式
    一 正则表达式与通配符 1 正则表达式是用在文件中匹配符合条件的字符串,正则是包含匹配,grep,awk,sed等命令可以支持正则表达式 2 通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls,find,cp这些命令不支持正则表达式,所以只能用Shell自己的通配
  • cp、chmod、chown、grep及正则表达式练习
    cp、chmod、chown、grep及正则表达式练习
    复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。编辑/etc/group文件,添加组hadoop。 使用vim指令编辑/etc/group文件,进入末行模式(输入冒号),然后输入$回车,将光标跳至末行,然后按下o(小写)在最
  • 3分钟轻松掌握 grep 命令中的正则表达式
    如何在Linux系统和类 Unix 的操作系统中使用带正则表达式的grep命令呢?Linux系统自带了支持拓展正则表达式的 GNU 版本grep工具。所有的Linux系统中默认安装的都是 GNU 版 grep 。grep命令被用来检索一台服务器或工作站上任何位置的文本信息。一、快速了解正
点击排行