专栏首页mwangblogLinux中的管道命令(二)
原创

Linux中的管道命令(二)

toc

nl

nl为文件添加行号,data文件的内容为:

abc
def

ghi

使用nl输出data文件:

$ nl data
     1  abc
     2  def

     3  ghi

可以看到,nldata文件添加了行号,但是并没有为空白行添加行号。

还有一点是,nl程序并不会改变文件,可以使用重定向将输出保存为新文件。

使用-b a选项可以使nl对所有行编号(包括空白行):

$ nl -b a data
     1  abc
     2  def
     3
     4  ghi

使用-v n设置起始编号为n,使用-i n设置增量为n,例如下面的命令将起始编号设置为4,将增量设置为2:

$ nl -v 4 -i 2 data
     4  abc
     6  def

     8  ghi

最后,了解一下-n选项,该选项后可以使用ln(左对齐)、rn(右对齐)和rz(右对齐且补0)设置编号格式:

$ nl -b a -n ln data	# 编号左对齐
1       abc
2       def
3
4       ghi
$ nl -b a -n rn data	# 编号右对齐
     1  abc
     2  def
     3
     4  ghi
$ nl -b a -n rz data	# 编号右对齐且补0
000001  abc
000002  def
000003
000004  ghi

wc

厕所?

wc程序统计一个文件的行(包含空白行)、单词和字符(包含制表符、换行符等空白字符)。

$ wc data
 4  3 13 data

使用wc程序统计data文件中的内容,给出的结果是:data文件有4行、3个单词、13个字符。

wc程序也可以统计多个文件并给出总和:

$ wc data source.list
  4   3  13 data
  6  35 442 source.list
 10  38 455 total

也可以使用该程序统计其中的一项,分别是-l(统计行)、-w(统计单词)和-c(统计字符):

$ wc -l data    # 统计行
4 data
$ wc -w data    # 统计单词
3 data
$ wc -c data    # 统计字符
13 data

diff

首先,我们来看两个文件,第一个文件是x,它的文件内容为:

aa
a a

第二个文件是xx,它的文件内容为:

a a
a   a

diff命令接受两个文件作为命令参数,比如$ diff file1 file2diff命令会给出将file1文件改成file2文件的方法,这样就可以比较两个文件的不同,本文将file1称为第一个文件,file2称为第二个文件。

使用diff来比较xxx的区别:

$ diff x xx
1d0
< aa
2a2
> a   a

如上所述,diff命令会给出将第一个文件修改成第二个文件的方法,在这个例子中第一个文件是x,第二个文件是xx。如果两个文件完全相同,diff不会给出任何信息。

如果要把x文件改成xx文件的样子,diff给出的建议是:

  • 1d01表示第一个文件的第1行,d(delete)表示删除,0表示第二个文件的第0行(此行不存在),整个表示删除第一个文件的第1行;
  • < aadiff使用<表示第一个文件,>表示第二个文件,< aa结合1d0看,就是将第一个文件的第1行删除,这一行的内容为aa
  • 2a22表示第一个文件的第2行,a(append)表示追加,2表示第二个文件的第2行,整个表示在第一个文件的第2行后面追加第2个文件的第2行;
  • > a a>表示第二个文件,结合2a2看,表示被追加的第二个文件的第二行是a a

此外,还有2c3这种格式,它表示将第一个文件的第2行改为(change)第二个文件的第3行。

事实上,我觉得这种显示并不易读(什么玩意儿……),万幸的是,可以使用-u选项将输出显示为下面这样:

$ diff -u x xx
--- x   2018-07-09 17:24:20.463797988 +0800
+++ xx  2018-07-09 17:24:30.551797950 +0800
@@ -1,2 +1,2 @@
-aa
 a a
+a   a

这种显示方法首先列出两个文件的信息,然后给出将第一个文件改为第二个文件的方法,显然,diff给出的方法是删除aa行,最后追加a a行,a a行不需要改变。

还可以使用-y选项将输出显示为下面这样:

$ diff -y x xx
aa                                                            <
a a                                                             a a
                                                              > a   a

左边一列表示第一个文件,右边一列表示第二个文件,可以直接进行比较。

最后,-i选项表示不区分大小写,-w选项表示忽略空格和制表符,-b选项只在意是否有空白符,而不在意空白符的数量。

对于diff -w命令,xxx两个文件是没有区别的,因为忽略了空白符(这里是空格):

$ diff -w -u x xx
$

对于diff -b命令,xxx两个文件第一行有区别,因为一个没有空格,而一个有空格;第二行没有区别,因为都有空格,-b选项忽略了空格的数量:

$ diff -b x xx
1c1
< aa
---
> a a

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux中的管道命令(三)

    tr命令将文本中的一个字符替换为另一个字符(除非挤压字符),它不直接读取文件,而是从标准输入中读取信息,它的语法如下:

    mwangblog
  • git文件的操作

    mwangblog
  • Linux查找文件 find

    mwangblog
  • Windows 文件名非用反斜杠?Python 小技巧帮你解决这个麻烦

    在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:

    Python猫
  • Windows文件名非用反斜杠?Python小技巧帮你解决这个麻烦

    在编程过程中,我们往往会遇到一个小麻烦——微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠:

    机器之心
  • 换个姿势学量化!|【量化小讲堂】使用python计算各类移动平均线

    作者:邢不行 原文链接: http://bbs.pinggu.org/thread-3631776-1-1.html (本文已获作者授权转载,如需转载请与原作者...

    数说君
  • Spark运行机制与原理详解目录Spark Internals

    https://github.com/JerryLead/SparkInternals Spark Internals Spark Version: 1.0.2...

    Albert陈凯
  • 前后分离模型之封装 Api 调用

    https://segmentfault.com/a/1190000012040777

    前端博客 : alili.tech
  • CVE-2015-1641 Word 利用样本分析

    00 引 子 本文我们将通过一个恶意文档的分析来理解漏洞 CVE-2015-1641(MS15-033)的具体利用过程,以此还原它在现实攻击中的应用。就目前来...

    Seebug漏洞平台
  • 云计算技术将如何影响商业世界?

    云计算技术已经渗透到人们生活的各个方面,其中包括个人喜好和专业工作。例如,很多音乐和电视节目都可以在云端存储和访问。从待办事项列表到随机笔记,手机的所有内容都可...

    静一

扫码关注云+社区

领取腾讯云代金券