本篇博客将介绍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 -r | sort默认的排序方式是从上到下升序,-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字段中的命令