nl
nl
为文件添加行号,data
文件的内容为:
abc
def
ghi
使用nl
输出data
文件:
$ nl data
1 abc
2 def
3 ghi
可以看到,nl
为data
文件添加了行号,但是并没有为空白行添加行号。
还有一点是,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 file2
,diff
命令会给出将file1
文件改成file2
文件的方法,这样就可以比较两个文件的不同,本文将file1
称为第一个文件,file2
称为第二个文件。
使用diff
来比较x
和xx
的区别:
$ diff x xx
1d0
< aa
2a2
> a a
如上所述,diff
命令会给出将第一个文件修改成第二个文件的方法,在这个例子中第一个文件是x
,第二个文件是xx
。如果两个文件完全相同,diff
不会给出任何信息。
如果要把x
文件改成xx
文件的样子,diff
给出的建议是:
-
1d0
:1
表示第一个文件的第1行,d
(delete)表示删除,0
表示第二个文件的第0行(此行不存在),整个表示删除第一个文件的第1行; -
< aa
,diff
使用<
表示第一个文件,>
表示第二个文件,< aa
结合1d0
看,就是将第一个文件的第1行删除,这一行的内容为aa
; -
2a2
,2
表示第一个文件的第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
命令,x
和xx
两个文件是没有区别的,因为忽略了空白符(这里是空格):
$ diff -w -u x xx
$
对于diff -b
命令,x
和xx
两个文件第一行有区别,因为一个没有空格,而一个有空格;第二行没有区别,因为都有空格,-b
选项忽略了空格的数量:
$ diff -b x xx
1c1
< aa
---
> a a