linux:文本处理系列-1.行截取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux:文本处理系列-1.行截取相关的知识,希望对你有一定的参考价值。

参考技术A (自己)常用的文本文件的行处理命令

示例文件:test.vcf
1、head -n 10 test.vcf
head : 默认是提取文件的前10行,-n 参数可以设定选择文件的前n行

2、tial -n 10 test.vcf
tail : 默认是提取文件的末尾10行, -n 参数可以设定选择文件末尾的n行

3、sed -n '10,20p' test.vcf
sed -n : 随意选择需要查看的行
sed命令是一个面向行处理的编辑器,可以和正则表达式配合使用,附上较全面的sed命令使用教程。
https://man.linuxde.net/sed

4、awk 截取行的指定长度字符串
less test.gz |awk 'if(NR%2==1)printelseprint substr($1,1,75)' | gzip -c > test.part.gz
说明:对test.gz文件指定行截取75bp,原来是150bp

5、对n行的第三列求和,求平均值
grep -v ‘#’ test.vcf |sed -n '20,35p' |awk -F '\t' 'sum+=$3;n++ENDprint sum,sum/n'
(linux 一行命令计算速度比Python快,简单计算喜欢用linux命令)
记得随时整理使用过的命令,没学过linux,靠着各种帖子,随时需要随时补给,有点懒。

linux文本处理工具-1

文件内容: cat ,more,less

文件截取:head,tail

按列抽取:cut

排序和统计:sort,wc

-----------------------------------------------------

cat [OPTION]... [FILE]...    //用于查看字符文件

-E:显示行结束符$ 

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

-A:显示所有控制符     

-b:非空行编号 

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

------------------------------------------------------

分页查看

more:分页查看文件

     more [OPTIONS...] FILE...   

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

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

  查看时有用的命令包括:

      /文本 搜索 文本

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

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

less
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
还可以在冒号后面直接输入 /要搜索的关键字 进行 高亮显示,可以 用 n 向前查找或者 N 向后查找。

------------------------------------------------------------------------

head  查看文件的前几行

   head  failename   默认显示文件的前十行      head -n11 passwd ==head -11 passwd  //指定了查看文件的前几行

tail 查看文件的后几行   

        tail    failename   默认显示文件的后十行     tail -n11 passwd == tail -11 passwd   //指定了查看文件的后几行          

  tail -f catalina.out   追踪文件新增加的内容,常用于日志监控

---------------------------------------------------------------------------------------------

cut  按列抽取文本

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

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

      -f FILEDS:       

#: 第#个字段       

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

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

混合使用:1-3,7 

       -c 按字符切割 

实例:
cut -d: -f1,3 /etc/passwd //以:作为分隔符,取第1,3列
cat /etc/passwd | cut -d: -f1,3     显示结果是这种  root:0

ifconfig ens33 |head -2|tail -1| tr -s " "|cut -d" " -f1-3
ifconfig ens33 |head -2|tail -1| tr -s " "|cut -d" " -f1,2,3
cut -c34-36 // 截取第34到36个字符

------------------------------------------------------------------------------------------------------

wc 统计数据

  计数单词总数、行总数、字节总数和字符总数 

  wc story.txt 

  39     237    1901 story.txt

  行数   字数   字节数 

       常用选项

    • -l 只计数行数
    • -w 只计数单词总数
    • -c 只计数字节总数
    • -m 只计数字符总数
    • -L 显示文件中最长行的长度 

--------------------------------------------------------------------------------------------------------------------

tr 

      tr ‘ ‘ +   //把‘ ‘替换成+

      tr -s ‘ ‘   //压缩空格

       tr -d ‘0-9‘   //删除字符

      tr -dc ‘[0-9 ]‘    //除此之外的其他字符删除

      tr -s " " %   压缩并替换

-----------------------------------------------------------------------

文本排序sort   根据列来排序( 一个字符,一个字符比较)

常用选项

  • -r 执行反方向(由上至下)整理
  • -R 随机排序
  • -n 执行按数字大小整理
  • -f 选项忽略(fold)字符串中的字符大小写
  • -u 选项(独特,unique)删除输出中的重复行
  • -t  c 选项使用c做为字段界定符
  • -k  X 选项按照使用c字符分隔的X列来整理能够使用多次 

     echo {1..10}|tr ‘ ‘ ‘ ‘|sort -rn //把 一行数字 转成一列数字,然后按照数字排序

----------------------------------------------------------------------------------------------

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

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

      • -c: 显示每行重复出现的次数
      • -d: 仅显示重复过的行
      • -u: 仅显示不曾重复的行
      • 注:连续且完全相同方为重复

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

      sort userlist.txt | uniq -c

--------------------------------------------------------------------------------

 grep    过滤行

grep [OPTIONS] PATTERN [FILE...] 

      • --color=auto: 对匹配到的文本着色显示 
      • -m  #  匹配#次后停止 
      • -v 显示不被pattern匹配到的行 
      • -i 忽略字符大小写 
      • -n 显示匹配的行号 
      • -c 统计匹配的行数 
      • -o 仅显示匹配到的字符串 
      • -q 静默模式,不输出任何信息 
      • -A # after, 后#行 
      • -B # before, 前#行 
      • -C # context, 前后各#行 
      • -e 实现多个选项间的逻辑or关系  grep –e ‘cat ’  -e ‘dog’  file 
      • -w 匹配整个单词 
      • -E 使用ERE 
      • -F 相当于fgrep,不支持正则表达式 
      • -f file 根据模式文件处理

nmap -v -sP 172.16.128.0/24 |grep -B1 up    //匹配含有up行的  前一行
|grep -e root -e bin 多个条件 或者包含       //包含root或者包含 bin
ls |grep -v [abc]      //文件名中不包含a b c 三个字母的文件名
cat /etc/centos-release |grep -o "<[0-9]+>"|head -1     //匹配  单个的数字
[root@centos7 ~]#grep -E "^([^:]+):.*<1$" /etc/passwd 分组       //扩展的正则表达式

 

---------------------------------------------------------------------------------------------

正则表达式

字符匹配:

  •   .   匹配任意单个字符
  •   [ ]   匹配指定范围内的任意单个字符,示例:[wang]   [0-9]    [a-z]   [a-zA-Z]
  •   [^]  匹配指定范围外的任意单个字符 

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

  •  * 匹配前面的字符任意次,包括0次   贪婪模式:尽可能长的匹配
  • .* 任意长度的任意字符
  • ? 匹配其前面的字符0或1次 
  • + 匹配其前面的字符至少1次 
  • {n} 匹配前面的字符n次 
  • {m,n} 匹配前面的字符至少m次,至多n次 
  • {,n} 匹配前面的字符至多n次 
  • {n,} 匹配前面的字符至少n次

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

  •   ^ 行首锚定,用于模式的最左侧
  •   $ 行尾锚定,用于模式的最右侧
  •   ^PATTERN$  用于模式匹配整行    ^$  空行   ^[[:space:]]*$  空白行
  •   < 或  词首锚定,用于单词模式的左侧   (单词模式:数字字母下划线算单词的一部分,其他算单词的分界线)
  •   > 或  词尾锚定,用于单词模式的右侧 
  •   <PATTERN> 匹配整个单词 

  分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+ 

  或者:|     

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

             技术图片

 

 扩展正则表达式

  egrep = grep -E 

   和基本正则表达式的区别就是,有一些地方不用加斜线(),

  基本正则表达式需要用到斜线的地方: ( )      < >      {}      +     ?

  扩展的正则表达式  :  <    >

 

ifconfig |grep -oE "(2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9]?[0-9])(.(2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9]?[0-9])){3}"        //扩展正则表达式匹配ip

ifconfig |grep -Po "((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)"     //perl正则表达式匹配ip

  vim %s#^(/download.*)/media/(.*)..*$#1/mp3/2.mp3    // vim 搜索替代 分组

  

 

 

 

 

 

 

 

 

 

以上是关于linux:文本处理系列-1.行截取的主要内容,如果未能解决你的问题,请参考以下文章

linux文本处理工具-1

linux 运维基础文本处理

Linux文本处理和软件包管理

第七章 linux文本处理工具

文本处理小工具

批处理系列 - 通过文本内容行命名文件