文本处理命令- cat more less cut wc sort uniq

Posted paultsao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本处理命令- cat more less cut wc sort uniq相关的知识,希望对你有一定的参考价值。

文本处理命令 cat more less cut wc sort uniq

 

1.cat 


     cat主要功能:
1.一次显示整个文件。 cat filename
2.从键盘创建一个文件。 cat > filename   (只能创建新文件,不能编辑已有文件).
1 [[email protected] ~]$ cat > test.txt
 2 this is a test for cat command.^[[D        
 3 a 
 4 b
 5 cc
 6 de
其中^[[D是向左的箭头,本想回退一格编辑,但很可惜只能顺序输入
另外,如何结束输入呢???

在linux下:
       ctrl+d:代表输入完成或者注销
       ctrl+c:中断当前程序
       ctrl+z:将作业放置到后台(暂停)
        所以,此处应使用CTRL+D,结束输入。

3.将几个文件合并为一个文件: cat file1 file2 > file
4.追加一个文件到另一个文件末尾   cat file1 >> file2
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting  显示非打印字符,使用^和M-表示,除了LFD和TAB



2.more


         more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 
more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按

空格键        显示下一屏。

Enter键       显示下一行。

nf            向下移动n屏,其中n是数字。

nb            向上移动n屏,其中n是数字。

/模式         向下查找指定的字符串模式。      n 重复前面查找命令。

=             显示当前的行号。

h             显示more所有命令的帮助信息。

q             退出more。
    :f            输出文件名和当前行的行号
    V             调用vi编辑器
    !命令          调用Shell,并执行命令 
     q              退出more

more命令从前向后读取文件,因此在启动时就加载整个文件。

命令参数:

+n      从笫n行开始显示        more +3 log2012.log

-n       定义屏幕大小为n行     more -5 log2012.log

+/pattern 在每个档案显示前搜寻该字串(pattern),从该字串前两行开始显示  more +/pattern log2012.log  

-s       把连续的多个空行显示为一行     more -s log2012.log

-u       把文件内容中的下画线去掉         more -u log2012.log




3.less


    命令格式:

        less [参数]  文件 

功能:

        less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

 

回车键  向下一行 
        空格键  向下一页
           y       向上一行
           b      向上一页

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个搜索(与 / 或 ? 有关)
        N:反向重复前一个搜索(与 / 或 ? 有关)
 

 v - 使用配置的编辑器编辑当前文件

h - 显示 less 的帮助文档

&pattern - 仅显示匹配模式的行,而不是整个文件

 


  命令参数:

-N  显示每行的行号

-o <文件名> 将less 输出的内容在指定文件中保存起来

-Q  不使用警告音

-s  显示连续空行为一行


 
 

4.cut


cut是一个选取命令,通常是针对“行”来进行分析的,并不是整篇信息分析的。

cut是从一行中 取出我们想要的;

(1)其语法格式为:
              cut  [-bn]  [file]         cut -b 3 ins.log  ;  cut -b 3-5,7 ins.log
                     -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
           cut  [-c]    [file]          cut -c 3 ins.log    cut -c -3 ins,log   cut -c 3-5,7 ins.log 
                                              cut -c -3   从开始到第三个字符    cut -c 3-  从第三个字符到最后
                 -c :以字符为单位进行分割。
           cut  [-df]   [file]            cut -d : -f 1        cut -d : -f 1,3-5            
                     -d :自定义分隔符,默认为制表符。  -f  :与-d一起使用,指定显示哪个区域。

使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f  :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。


实例:

1.以字节提取:

$ who
rocrocket :0           2009-01-08 11:07
rocrocket pts/0        2009-01-08 11:23 (:0.0)
rocrocket pts/1        2009-01-08 14:15 (:0.0)
如果我们想提取每一行的第3个字节,就这样:

$ who|cut -b 3
c
c
c

提取 3到5和 8 字节
$ who|cut -b 3-5,8
croe
croe
croe

 

2.以字符提取:
$ cat cut_ch.txt
星期一
星期二
星期三
星期四
cut -b 3 cut_ch.txt  (用字节提取出错了)
?
?
?
?
cut -c 3 cut_ch.txt     (要用字符提取)




看到了吧,用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。

当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。

例子如下:
$ cat cut_ch.txt |cut -b 2
?
?
?
?
$ cat cut_ch.txt |cut -nb 2




 

3.自定义分隔:

如果遇到空格和制表符时,怎么分辨呢?怎么办?

有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。

cat tab_space.txt
this is tab finish.
this is several space      finish.

sed -n l tab_space.txt
this is tab\\tfinish.$
this is several space      finish.$

看到了吧,如果是制表符(TAB),那么会显示为\\t符号,如果是空格,就会原样显示
通过此方法即可以判断制表符和空格了。
注意,上面sed -n后面的字符是L的小写字母哦,不要看错。

(9)我应该在cut -d中用什么符号来设定制表符或空格呢?

其实cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。

如果你设定一个空格为间隔符,那么就这样:

$ cat tab_space.txt | cut -d ‘ ‘ -f 1
this
this
注意,两个单引号之间可确实要有一个空格哦,不能偷懒。
而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。

 

注意:

如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容

 
 
 

5.wc


            Linux系统中的wc(Word Count)命令的功能为统计
    指定文件中的字节数、字数、行数,并将统计结果显示输出。

    命令格式:

wc [选项]文件...

2.命令功能:

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

3.命令参数:

# wc install.log

            901  1815   40279 install.log
           行数 单词数 字节数 文件名

-c 统计字节数。  wc -c ins.log

-l 统计行数。        wc -l ins.log

-m 统计字符数。这个标志不能与 -c 标志一起使用。              wc -m ins.log

-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L 打印最长行的长度。

-help 显示帮助信息

--version 显示版本信息

实例2:用wc命令怎么做到只打印统计数字不打印文件名

                     # cat test.txt |wc -l

实例3:用来统计当前目录下的文件数

              # ls -l | wc -l
 
 
 

6.sort

 

据不同的数据类型进行排序,其语法及常用参数格式:
  sort [-bcfMnrtk] [源文件] [-o 输出文件] 

补充说明:sort可针对文本文件的内容,以行为单位来排序。

    参  数:
  -u   在输出行中去除重复行                    sort -u seq.txt
  -b   忽略每行前面开始出的空格字符。
  -c   检查文件是否已经按照顺序排序。
  -f   排序时,忽略大小写字母。
  -M   将前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。  ( 默认以文字类型排序)            sort -n number.txt

  -o<输出文件>   将排序后的结果存入指定的文件。sort -r number.txt -o number.txt
  -r   以相反的顺序来排序。                                         sort -r number.txt
  -t<分隔字符>   指定排序时所用的栏位分隔字符。   sort  -t ‘:’ -k 2 facebook.txt
  -k  选择以哪个区间进行排序。

  实例:
1.简单排序 并输出

$ cat seq.txt
banana
apple
pear
orange
       $ sort seq.txt
apple
banana
orange
pear

用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。
$ Sort seq.txt > result

 


2.自定义排序
    sort的-t选项和-k  
如果有一个文件的内容是这样:
$ cat facebook.txt
   banana:30:5.5
   apple:10:2.5
   pear:90:2.3
   orange:20:3.4

这个文件有三列,列与列之间用冒号隔开了,
第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
那么我想以水果数量来排序,也就是以第二列来排序?
        sort提供了  -t    选项,后面可以设定间隔符。指定了间隔符之后,就可以用 -k  来指定列数了。

 
$ sort -n -k 2 -t ‘:’ facebook.txt      (以:为分隔符 根据第二个域排序)
 
apple:10:2.5
        orange:20:3.4
       banana:30:5.5
       pear:90:2.3
 
 

 

7.uniq

      uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

 

uniq语法

[[email protected] ~]# uniq [-icu]
选项与参数:
-i   :忽略大小写字符的不同;
-c  :进行计数
-u  :只显示出一次的行列-d   :仅显示重复出现的行列

 
实例:

1.直接使用去重命令没有任何效果 

cat testfile
hello
world
friend
hello
world
hello
#uniq testfile  
hello
world
friend
hello
world
hello

 

2.先排序文件,然后去除重复

#cat words | sort |uniq
friend
hello
world

 

3.排序之后删除了重复行,同时在行首位置输出该行重复的次数

#sort testfile | uniq -c
1 friend
3 hello
2 world

 

4. -d仅显示存在重复的行,-c并在行首显示该行重复的次数

#sort testfile | uniq -dc
3 hello
2 world

 

5. -u仅显示不重复的行

sort testfile | uniq -u
friend  

 

【引用“乌托邦眺望”:http://www.cnblogs.com/centos2017/p/7896746.html

以上是关于文本处理命令- cat more less cut wc sort uniq的主要内容,如果未能解决你的问题,请参考以下文章

linux基础篇07,linux文本处理cat more less head tail sort uniq grep cut jion sed awk

05,文本处理cat more less head tail sort uniq wc tr grep cut jion sed awk ok

linux文本处理工具

文本查看和处理命令

2017-10-9linux文本处理

linux 运维基础文本处理