本篇博客将介绍egrep,awk,sed等文本编辑命令。

nl:类似于cat命令,但是自带行号,并且空行不在会计算到行中

命令选项介绍
nl -b指定行号指定的方式,主要有两种
nl -b a表示无论是否为空行,也同样列出行号(类似 cat -n)
nl -b t表示有空行,空的那一行不要列出行号(默认值)
nl -n列出行号表示的方法,主要有三种
nl -n ln行号在萤幕的最左方显示
nl -n rn行号在自己栏位的最右方显示,且不加 0
nl -n rz行号在自己栏位的最右方显示,且加 0
nl -w行号栏位的占用的位数

od:按指定格式输出文件内容,常用的有一个

命令选项介绍
od -c将文本每个字符单个输出,可以查看到底是空格还是\t占位符

在这里插入图片描述
该命令可以查看文本中的一些特殊字符,比如 \t 或者 \n 等,从而更好的确定分隔符。也能用该命令看出windows和Linux系统文本换行处的差别,这个我们后续会讲。

wc:统计指定文件中的字节数、字数、行数,并将统计结果显示输出

  • wc -l:统计行数
  • wc -m:统计字符数
  • wc -c:统计字节数,与-m相比,当出现中文等不同字节数的单个字符,就会不同
  • wc -w:统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串。说白了就是统计单词或者单个字的个数

sort:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

命令介绍
sort -u出行中去除重复行
sort -rsort默认的排序方式是从上到下升序,-r则从上到下降序
sort -o当想把排序后的内容写入自己的源文件中,若单单用输入重定向,会发现文件内容没有了,不信大伙可以做一个实验:sort -u > student.txt,再cat一下student.txt发现内容没有了,如果是sort -u student.txt -o student.txt就可以了
sort -n如果对数字进行排序,很可能出现10比2小的情况,这是因为,把10看成了字符"10"将"1"字符与"2"字符进行比较,结果就出现了10比2小,加上-n就把"10"字符看成数字进行比较了
sort -t指定间隔符,比如sort -t :,这就指定了冒号 : 为间隔符
sort -k指定比较的列数,比如sort -k 3,3:指定第3列进行排序
sort -k1n -k2n先第一列排序,再第二列排序

cut:从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来

  • cut -f:提取指定的字段,cut 命令使用 Tab 作为默认的分隔符,比如我想提取第2,3字段cut -f2,3
  • cut -d:指定自己的分隔符,比如我想指定冒号为分隔符cut -d’:’ ,一般我们会将-f和-d组合
    使用
  • cut -c:根据字符位置进行提取,注意空格和Tab也以字符来处理,比如cut -c 1,2,截取第
    1和第2个字符

grep:全面搜索正则表达式并把行打印出来,但是有的正则表达式不支持,比如或符号 | ,因此建议使用egrep这个升级的版本。

  • egrep ‘(ECE)|(CS)’ student.txt:匹配ECS或者CS字符,并输出所在行
  • egrep -v:反转查找,即找出不包含的行,比如:egrep -v ‘CS’ student.txt

sed:一个强大的文本处理工具,常用于正则匹配和替换操作。sed操作不会直接修改源文件,而是将查训或替换的内容显示在屏幕

  • sed ‘s/字符1/字符2/’:将匹配每一行的第一个字符1替换为字符2,如果某一行有两个字符1,那只会替换第一个
  • sed ‘1,4s/字符1/字符2/g’:把1到4行的字符1替换成字符2
  • sed ‘s/字符1/字符2/2’:跟上面类似,只不过是将每一行匹配的第二个字符1替换成字符2
  • sed ‘s/字符1/字符2/g’:将所有的字符1替换成字符2
  • sed -n ‘s/字符1/字符2/gp’:输出修改的行-n是禁止sed输出,但 p 标记会输出修改过的行,两者合并就只输出被替换命令修改过的行
  • sed ‘s/字符1/字符2/i’:替换的时候忽略大小写
  • sed -i ‘s/字符1/字符2/’:-i选项会直接修改源文件,因此要小心,这里介绍一个知识:Windows的文件格式中换行是有两个符号组成\r(CR)\n(LF),而Linux只有\n,因此要想将进行格式转换,只要执行一下命令:sed -i ‘s/\r//’ test
  • sed ‘1,3d’:删除1到三行,如果想删除不连续行,就要修改格式:sed ‘1d;3d’:删除1和3行这里介绍如何删除空行:sed ‘/^$/d’,不用匹配\n
  • sed ‘/<CS/d’:<的作用是把CS看成是一个单词,如果没有,那么AAACSBB也会匹配到
  • sed ‘1,3p’:重复打印第1~3行
  • sed -n ‘/字符1/!p’:将匹配到字符1的行不输出,即打印没有匹配字符1的行,同样适合d操作,即删除不匹配的行,保留匹配的行
  • sed ‘1,4s/字符串1/字符串2/w test’:将替换后的行保存到文件test中,注意是只保存替换行1到4行中有没有字符串1的行,那该行就没有替换,也就不会保存到test文件中
  • sed ‘2i test’:在第二行前追加一行,追加行的内容为test
  • sed ‘2a test’:在第二行后追加一行,追加行的内容为test

awk:行处理器,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

特殊符号含义
$0表示整一行
$1表示每行的第一个字段,$2则为第二个字段
NF字段数量变量
NR行号
‘{命令}’命令都放在这个格式中
‘/正则表达式/’正则表达式都放在/ /里面
  • awk ‘{print NR " "$0}’ stu.txt:给每一行打印行号,行号与首字符有空格隔开,其中逗号也可以表示空格
  • awk -F: ‘{print $1,$2}’:-F表示自定义分隔符,如果分隔符有多个可以这些写,awk -F"[: ]" ‘{print $1,$2}’:匹配空格和冒号作为分隔符
  • awk -F: ‘NF>2{print $0}’:显示字段大于2的行,比如有一行是1:2,那么这一行只有两个字段,因此不会被显示
  • awk -F: ‘NR>2{print $0}’:显示第三行以上的行,即不显示第一二行
  • awk -F’[:,]’ ‘{print $1}’:当分割字段有多个时,可以使用 -F ‘[]’ 这样的格式,这里指定分号; 和冒号; 为分隔符
  • awk ‘/\<Doe/’:显示有Doe这个单词的行
  • awk ‘!/\<Doe/’:显示没有Doe这个单词的行
  • awk ‘$1~/im/’:显示第一个字段中有im的行
  • awk ‘$1!~/im/’:显示第一个字段中没有im的行
  • awk ‘$4>3 {print $1,$2}’:匹配第四个字段大于3的行,并显示该行的第一和第二字段
  • awk ‘$4>3 && $4<12 {print $4}’:&&表示与,||表示或
  • awk ‘BEGIN{print “测试Begin功能”} {print $3}’:加上BEGIN字段后,会在运行其他命令前先运行Begin中的命令
  • awk “END{print “测试End功能”} {print #1}”:END字段同理,在运行完后再运行End字段中的命令
Logo

更多推荐