`
dxm1986
  • 浏览: 428314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux学习--sed,sort,uniq,join,cut,paste,split

阅读更多

linux学习--sed,sort,uniq,join,cut,paste,split
将 /abc/1231232 替换成  /abc

sed -e 's/abc\/[0-9]*/abc/g'  1.txt

或者

sed -e 's/\/[abc]\+//g' 1.txt

+在linux 里面是特殊字符,所以需要用\+ 联合 [0-9] 表示 1或多个数字

/ 需要进行转义  用 \/表示




11月5日
linux学习--sed,sort,uniq,join,cut,paste,split
==============================sed==========================
1、调用sed
 调用s e d有三种方式:在命令行键入命令;将s e d命令插入脚本文件,然后调用s e d;将s e d
命令插入脚本文件,并使s e d脚本可执行。
 使用s e d命令行格式为:
  sed [选项] s e d命令  输入文件。
 记住在命令行使用s e d命令时,实际命令要加单引号。s e d也允许加双引号
 
 使用s e d脚本文件,格式为:
  sed [选项] -f sed脚本文件输入文件
  
 要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为
  sed脚本文件 [选项] 输入文件
 
 sed选项如下:
 n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
 用来打印编辑行。
 c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条s e d命令,
 此选项无用,但指定它也没有关系。
 f 如果正在调用s e d脚本文件,使用此选项。此选项通知s e d一个脚本文件支持所有的s e d
 命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e d即为支持s e d命令的文件。
2、使用sed在文件中查询文本的方式
 s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
 1) 使用行号,可以是一个简单数字,或是一个行号范围。
 2) 使用正则表达式
    使用s e d在文件中定位文本的方式
  x x为一行号,如1
  x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
  / p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/
  / p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /
  p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3
  x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u /
  x , y ! 查询不包含指定行号x和y的行。1 , 2 !
3、基本sed编辑命令
    sed编辑命令
  p 打印匹配行
  = 显示文件行号
  a \ 在定位行号后附加新文本信息
  i \ 在定位行号后插入新文本信息
  d 删除定位行
  c \ 用新文本替换定位文本
  s 使用替换模式替换相应模式
  r 从另一个文件中读文本
  w 写文本到一个文件
  q 第一个模式匹配完成后推出或立即推出
  l 显示与八进制A S C I I代码等价的控制字符
  { } 在定位行执行的命令组
  n 从另一个文件中读文本下一行,并附加在下一行
  g 将模式2粘贴到/pattern n/
  y 传送字符
  n 延续到下一输入行;允许跨行的
4、sed和正则表达式
  sed识别任何基本正则表达式和模式及其行匹配规则
5、基本sed编程举例
  使用p(rint)显示行:
  p r i n t命令格式为[ a d d r e s s [,a d d r e s s ] P。显示文本行必须提供s e d命令行号。
   sed -n '2p' quote.txt
  显示从2到4行
   sed -n '2,4p' url_access_detail.txt
  
  打印模式:
   sed -n '/1028f/p' url_access_detail.txt 
   sed -n '/\/\?1028f/p' url_access_detail.txt 
   
  使用模式和行号进行查询:
   只在第4行查询 
    sed -n '4,/\/\?1028f/'p url_access_detail.txt
    
  显示整个文件:
   只需将行范围设为第一行到最后一行1 , $。$意为最后一行:
   sed -n '1,$p' quote.txt
   
  任意字符:
    匹配任意字母,后跟任意字母的0次或多次重复,并以i n g结尾,模式为/ . * i n g /。可以使用
 这个模式查询以i n g结尾的任意单词
   sed -n '/.*ing/'p quote.txt
   
  打印行号:
  要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/=。
   sed -e '/music/=' quote.txt
  (不过这些好像在linux里面不支持)
  
  附加文本:
  sed -n  '/1028f/'p  url_access_detail.txt |sed '/h/ a\then haha'
  在前面添加,用i\
  替换,用c\
  删除,用d\
6、替换文本
  替换命令用替换模式替换指定模式,格式为:
   [ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
  s选项通知s e d这是一个替换操作,并查询p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
 换它。
  g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
  p 缺省s e d将所有被替换行写入标准输出,加p选项将使- n选项无效。- n选项不打印输出
 结果。
  w 文件名使用此选项将输出定向到一个文件。
   sed 's/haha/hehe/g w a.out' quote.txt
   
  使用替换修改字符串:
  如果要附加或修改一个字符串,可以使用( &)命令,&命令保存发现模式以便重新调用
 它,然后把它放在替换字符串里面。这里给出一个修改的设计思路。先给出一个被替换模式,
 然后是一个准备附加在第一个模式后的另一个模式,并且后面带有&,这样修改模式将放在
 匹配模式之前。例如, s e d语句s/nurse/"Hello"&/p 的结果如下
  sed 's/nurse/"Hello" &/p' quote.txt
 比如原来的句子为: The nurse come from china.
 替换后的句子为:  The "Hello" nurse come from china.
7、从文件中读文本
  处理文件时, s e d允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在
 模式匹配行后,格式为:address r filename
  sed '/companty/r append.txt' quote.txt
8、显示文件中的控制字符
  s e d格式为:
  [ a d d r e s s,[ a d d r e s s ] ] l
  sed '1,$1' quote.txt
  (linux 不支持)
9、处理报文输出
  比如有如下输出:
   Database Size DateCreated
   ----------------------------
   newlog  2289 12/11/2005
   mysql   1909 09/12/2005
   
   (2 row affected)
   
  为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下操作:
  1) 使用s / - * / / g删除横线- - - - - -。
  2) 使用/ ^ $ / d删除空行。
  3) 使用$ d删除最后一行
  4) 使用1 d删除第一行。
  5) 使用awk {print $1}打印第一列。
  命令如下,这里使用了c a t,并管道传送结果到s e d命令  
  最后的命令如下:
   cat sql.txt| sed 's/-*//g'|sed '/^$//g'|sed '$d'|sed '1d'|awk '{print $1}'
   
  去除行首数字:
   sed 's/^[0-9]//g' data.txt
   
10、一些常用的处理
  ‘s / \ . $ / / g’ 删除以句点结尾行
  ‘-e /abcd/d’ 删除包含a b c d的行
  ‘s / [ ] [ ] [ ] * / [ ] / g’ 删除一个以上空格,用一个空格代替
  ‘s / ^ [ ] [ ] * / / g’ 删除行首空格
  ‘s / \ . [ ] [ ] * / [ ] / g’ 删除句点后跟两个或更多空格,代之以一个空格
  ‘/ ^ $ / d’ 删除空行
  ‘s / ^ . / / g’ 删除第一个字符
  ‘s /CO L \ ( . . . \ ) / / g’ 删除紧跟C O L的后三个字母
  ‘s / ^ \ / / / g’ 从路径中删除第一个\
  ‘s / [ ] / [ ] / / g’ 删除所有空格并用t a b键替代
  ‘S / ^ [ ] / / g’ 删除行首所有t a b键
  ‘s / [ ] * / / g’ 删除所有t a b键
================================合并与分割==========================
sort uniq join cut paste split
  ================sort用法=====================
 sort命令将许多不同的域按不同的列顺序分类。
1、sort选项
 sort命令的一般格式为:
  sort -cmu -o output_file [other options] +pos1 +pos2 input_files
  下面简要介绍一下s o r t的参数:
  -c 测试文件是否已经分类。
  -m 合并两个分类文件。
  -u 删除所有复制行。
  -o 存储s o r t结果的输出文件名。
  其他选项有:
  -b 使用域进行分类时,忽略第一个空格。
  -n 指定分类是域上的数字分类。
  -t 域分隔符;用非空格或t a b键分隔域。
  -r 对分类次序或比较求逆。
  +n n为域号。使用此域号开始分类。
  n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
  post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。
2、sort启动方式
  缺省情况下, s o r t认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用- t选项。
  sort执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等;
 如果未设置,用空格代替。缺省时s o r t将整个行排序,指定域号的情况例外。
  关于s o r t的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。
3、文件是否已分类
  sort -c data.txt
4、sort分类求逆
 如果要逆向s o r t结果,使用-r选项。
   sort -t: -r video.txt
5、按指定域分类
 有时需要只按第2域(分类键1)分类。
  sort -t: +1 video.txt
6、数值域分类
 用-n选项。必须用,不然得不到想要的结果。
  sort -t: +3n video.txt
7、唯一性分类
 使用- u选项进行唯一性(不重复)分类以去除重复行。
8、使用k的其他sort方法
 sort还有另外一些方法指定分类键。可以指定k选项。
  sort -t: -k4 video.txt
  
 使用k做分类键排序:  
 可以指定分类键次序。先以第4域,再以第1域分类,命令为-k4 -k1
  sort -t: -k4 -k1 video.txt
9、指定sort序列
 可以指定分类键顺序,也可以使用- n选项指定不使用哪个分类键进行查询。看下面的sort命令:
  sort +0 -2 +3
 该命令意即开始以域0分类,忽略域2,然后再使用域3分类。
10、pos用法
 指定开始分类的域位置的另一种方法是使用如下格式:
  sort  +filed.characterin
 意即从filed开始分类,但是要在此域的第characterin个字符开始。 
11、使用head和tail将输出分类
  可以使用h e a d或t a i l查阅任何大的文本文件 
  head -200 filename
12、awk使用sort输出结果
13、将两个分类文件合并
  将文件合并前,它们必须已被分类.
  使用-m +0。将这个文件并入已存在的分类文件v i d e o . s o r t,要以名称域进行分类,实际上没有必要加入+ o,但为了保险起见,还是加上的好。
   sort -t: -m +0 video2.txt video.sort
   
   ===================uniq用法====================
  uniq用来从一个文本文件中去除或禁止重复行。一般u n i q假定文件已分类,并且结果正确。
  sort的唯一性选项去除所有重复行,而uniq命令并不这样做。重复行是什么?在uniq里意即持续不断重复出现的行,中间不夹杂任何其他文本.
  命令一般格式:
   uniq -u d c -f inputfile outputfile
  其选项含义:
   -u 只显示不重复行。
   -d 只显示有重复数据行,每种重复行只显示其中一行
   -c 打印每一重复行出现次数。
   -f n为数字,前n个域被忽略。
   一些系统不识别- f选项,这时替代使用- n。
  对特定域进行测试:
  使用- n只测试一行一部分的唯一性。例如- 5意即测试第5域后各域唯一性。域从1开始记数。
 如果忽略第1域,只测试第2域唯一性,使用- n 2,下述文件包含一组数据,其中第2域代表组代码。
   uniq -f2 parts.txt或
   uniq -n2 parts.txt
  ==================join用法(强大呀,像sql里面的join 呢)========================
 join用来将来自两个分类文本文件的行连在一起。
 下面讲述join工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一
些元素与另一个文件相关。由于这种关系, join将两个文件连在一起,这有点像修改一个主文
件,使之包含两个文件里的共同元素。
 为有效使用join,需分别将输入文件分类:
 join的格式: 
  join [option] file1,file2
  an n 为一数字,用于连接时从文件n中显示不匹配行。例如, -a1显示第一个文件的不匹
 配行,- a2为从第二个文件中显示不匹配行。
  o n.m n为文件号,m为域号。1.3表示只显示文件1第三域,每个n,m必须用逗号分隔,
 如1.3,2.1。
  j n m   n为文件号,m为域号。使用其他域做连接域
  t  域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:
  
 连接域为域0,缺省join删除或去除连接键的第二次重复出现:
   join names.txt town.txt
 1、不匹配连接,下面的例子显示匹配及不匹配域
   join -a1 -a2 names.txt town.txt
  只显示第一个文件中不匹配行:
   join -a1 names.txt town.txt
 2、选择性连接
 使用- o选项选择连接域。例如要创建一个文件仅包含人名及城镇, j o i n执行时需要指定显示域。方式如下:
 使用1 . 1显示第一个文件第一个域,2 . 2显示第二个文件第二个域,其间用逗号分隔。命令为:
   join -o 1.1,2.2 names.txt town.txt
 使用-jn m进行其他域连接,例如用文件1域3和文件2域2做连接键,命令为:
   join -j1 3 -j2 2 names.txt town.txt
 
 ===========================cut用法=========================================
 cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
 cut一般格式为:
 cut [options] file1 file2
 下面介绍其可用选项:
 -c list 指定剪切字符数。
 -f field 指定剪切域数。
 -d 指定与空格和t a b键不同的域分隔符。
 -c 用来指定剪切范围,如下所示:
 -c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
 -c1-50 剪切前5 0个字符。
 -f 格式与- c相同。
 -f 1,5 剪切第1域,第5域。
 - f 1,10-12 剪切第1域,第1 0域到第1 2域。
 
 剪切指定域:
 cut命令中剪切各域需用逗号分隔,如剪切域1和3,可以使用:
  cut -d: -f1,3 pers
 
 =========================paste用法==========================================
  cut用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴
 起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
  paste将按行将不同文件行信息放在一行。缺省情况下,paste连接时,用空格或t a b键分隔
 新行中不同文本,除非指定- d选项,它将成为域分隔符。
  paste格式为;
   paste -d -s -file1 file2
 选项含义如下:
  -d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
  -s 将每个文件合并成行而不是按行粘
  
 paste命令管道输入:
 paste命令还有一个很有用的选项( -)。意即对每一个( -),从标准输入中读一次数据。
 使用空格作域分隔符,以一个4列格式显示目录列表。方法如下:
   ls |paste -d":" - - - -
 =========================split用法==========================================
  split用来将大文件分割成小文件。
  
 split -output_file-size input-filename output-filename
 每个文件格式为x [ a a ]到x [ z z ],x为文件名首字母, [ a a ]、[ z z ]为文件名剩余部分顺序字符组合.
   split -5000 url_access_user.txt splitfile

分享到:
评论

相关推荐

    Linux学习笔记【博文整理系列】

    Linux笔记——命令:Sort,uniq,join,cut,paste,split Linux笔记——shell基础:变量&本地变量&位置变量&特定变量参数 Linux笔记——条件测试test Linux笔记——控制流 Linux笔记——shell补充:参数传递&函数等 Linux...

    Linux命令搜索工具linux-command.zip

    col、colrm、comm、csplit、ed、egrep、ex、fgrep、fmt、fold、grep、ispell、jed、joe、join、look、mtype、pico、rgrep、sed、sort、spell、tr、uniq、wc 网络通讯 dip、getty、mingetty、ppp-off、smbd...

    linux命令c语言自己实现(大概40来个)

    自己学习《APUE》时写的linux下一些命令(大概40个左右)实现,仅当学习使用,这些命令包括cat cp echo head ls paste rmdir tail umask who chattr cut expand join mkdir pwd sed tee uniq chgrp date find last ...

    shell基础十二篇

    []等)shell基础5:输入/输出(echo,read,cat,管道,tee,重定向等)shell基础8:文本过滤工具(grep) shell基础9:awk 64 shell基础10:sed 94 Shell基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,...

    Linux shell脚本 精华中文版

    011_合并与分割_sort_join_uniq_cut_paste_split.pdf 012_tr的用法.pdf 013_登录环境.pdf 014_环境和shell变量.pdf 015_引号.pdf 016_基础shell编程_shell脚本介绍.pdf 017_条件测试_test_expr.pdf 018_控制...

    Linux命令大全(CHM格式离线版)

    Linux命令大全(CHM格式离线版) Linux命令大全(修改版) 进行重新编译的说明 文件传输 bye ftp ftpcount ftpshut ftpwho ncftp tftp uucico uucp uupick uuto 备份压缩 ar bunzip2 bzip2 bzip2recover compress cpio ...

    windows dos环境下直接运行linux命令集合

    使用方法,解压到本地目录,配置path,即可在dos下使用linux命令。 windows下能直接执行的linux命令,基本包括日常所有,如:[.exe grolbp.exe regtool.exe a2p.exe grolj4.exe rm.exe a2p5.10.0.exe grops.exe ...

    Linux命令大全

    linux命令大全,中文版本 Linux命令大全(修改版) 进行重新编译的说明 文件传输 bye ftp ftpcount ftpshut ftpwho ncftp tftp uucico uucp uupick uuto 备份压缩 ar bunzip2 bzip2 bzip2recover compress cpio dump ...

    shell 编程(中文)[pdf]

    011_合并与分割_sort_join_uniq_cut_paste_split.pdf 012_tr的用法.pdf 013_登录环境.pdf 014_环境和shell变量.pdf 015_引号.pdf 016_基础shell编程_shell脚本介绍.pdf 017_条件测试_test_expr.pdf 018_控制流结构_...

    Linux命令大全完整版

    Linux命令大全完整版 目 录 目 录 I 1. linux系统管理命令 1 adduser 1 chfn(change finger information) 1 chsh(change shell) 1 date 2 exit 3 finger 4 free 5 fwhois 5 gitps(gnu interactive tools ...

    Linux与unix shell编程指南(1-16)

    11.7 split用法 117 11.8 小结 118 第12章 tr用法 119 12.1 关于tr 119 12.1.1 字符范围 119 12.1.2 保存输出 120 12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121...

    LINUX与UNIX SHELL编程指南(很全)

    11.7 split用法 117 11.8 小结 118 第12章 tr用法 119 12.1 关于tr 119 12.1.1 字符范围 119 12.1.2 保存输出 120 12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121...

    Linux与unix shell编程指南

    本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令...

    Linux shell编程指南

    本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod...

    LINUX与UNIX_Shell编程指南(上)

    11.7 split用法 117 11.8 小结 118 第12章 tr用法 119 12.1 关于tr 119 12.1.1 字符范围 119 12.1.2 保存输出 120 12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121...

    绝版经典《Linux与UNIX Shell编程指南》

    11.7 split用法 117 11.8 小结 118 第12章 tr用法 119 12.1 关于tr 119 12.1.1 字符范围 119 12.1.2 保存输出 120 12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod...

    linux shell 编程教程

    linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 ...

    LINUX与UNIX_Shell编程指南

    详细的介绍了Linux下的编程指南 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对...

    LINUX 与 UNIX SHELL编程指南

    11.7 split 用法 117 11.8 小结 118 第 12 章 tr 用法 119 12.1 关于 tr 119 12.1.1 字符范围 119 12.1.2 保存输出 120 12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 ...

Global site tag (gtag.js) - Google Analytics