前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux中的管道命令(二)

Linux中的管道命令(二)

原创
作者头像
mwangblog
发布于 2018-07-09 12:25:13
发布于 2018-07-09 12:25:13
1.7K0
举报
文章被收录于专栏:mwangblogmwangblog

toc

nl

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

代码语言:txt
AI代码解释
复制
abc
def

ghi

使用nl输出data文件:

代码语言:txt
AI代码解释
复制
$ nl data
     1  abc
     2  def

     3  ghi

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

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

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

代码语言:txt
AI代码解释
复制
$ nl -b a data
     1  abc
     2  def
     3
     4  ghi

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

代码语言:txt
AI代码解释
复制
$ nl -v 4 -i 2 data
     4  abc
     6  def

     8  ghi

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

代码语言:txt
AI代码解释
复制
$ 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程序统计一个文件的行(包含空白行)、单词和字符(包含制表符、换行符等空白字符)。

代码语言:txt
AI代码解释
复制
$ wc data
 4  3 13 data

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

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

代码语言:txt
AI代码解释
复制
$ wc data source.list
  4   3  13 data
  6  35 442 source.list
 10  38 455 total

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

代码语言:txt
AI代码解释
复制
$ wc -l data    # 统计行
4 data
$ wc -w data    # 统计单词
3 data
$ wc -c data    # 统计字符
13 data

diff

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

代码语言:txt
AI代码解释
复制
aa
a a

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

代码语言:txt
AI代码解释
复制
a a
a   a

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

使用diff来比较xxx的区别:

代码语言:txt
AI代码解释
复制
$ 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选项将输出显示为下面这样:

代码语言:txt
AI代码解释
复制
$ 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选项将输出显示为下面这样:

代码语言:txt
AI代码解释
复制
$ diff -y x xx
aa                                                            <
a a                                                             a a
                                                              > a   a

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

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

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

代码语言:txt
AI代码解释
复制
$ diff -w -u x xx
$

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

代码语言:txt
AI代码解释
复制
$ diff -b x xx
1c1
< aa
---
> a a

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux 命令(119)—— diff 命令
如果给定的文件名是 -,表示从标准输入读取内容。如果给定的文件是目录,则将会比较该目录中具有相同文件名的文件,默认情况下不会对其子目录文件进行任何比较操作。
恋喵大鲤鱼
2020/02/20
1.7K0
Linux中的管道命令(三)
tr命令将文本中的一个字符替换为另一个字符(除非挤压字符),它不直接读取文件,而是从标准输入中读取信息,它的语法如下:
mwangblog
2018/08/02
1.7K0
Linux 文件管理命令语法、参数、实例全汇总(一)
命令:cat cat 命令用于连接文件并打印到标准输出设备上。 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数说明 -n 或 --number:由 1 开始对所有输出的行数编号。 -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。 -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。 -v 或 --show-nonprinting:使用 ^ 和
小小科
2018/05/04
1.4K0
linux命令行文本操作一文就够
主要是 awk/grep/sed这三驾马车,加上vi这个神器,最后辅助一些小工具,包括 wc,cat,diff,join,paste,cut,uniq 这里 简要地整理下Linux用来处理数据文本的工
生信技能树
2018/03/09
4K0
Linux命令(44)——expand命令
用于将文件的制表符(Tab)转换为空格符(Space),默认一个Tab对应8个空格符,并将结果输出到标准输出。若不指定任何文件名或所给文件名为”-“,则expand会从标准输入读取数据。
恋喵大鲤鱼
2018/08/03
8760
Linux命令(44)——expand命令
Linux常用命令速查-文件管理
Linux系统中的每个文件和目录都有访问许可权限,用他来确定谁能通过何种方式对文件和目录进行访问和操作。
Java学习录
2019/04/18
1.5K0
Shell 文本处理命令
对文件内容进行去重 如果文件内容有很多重复的,需要进行去重。sort也是支持的,可以通过-u参数使用
剧终
2020/08/26
8300
Linux三剑客之awk(2):awk模块、变量与执行
BEGIN模块在awk读取文件之前就执行,BEGIN模式常常被用来修改内置变量ORS,RS,FS,OFS等的值。可以不接任何输入文件
宜信技术学院
2019/07/02
1.1K0
Linux三剑客之awk(2):awk模块、变量与执行
详解Linux三剑客之awk
awk不仅仅是linux系统中的一个命令,而且是一种编程语言;它可以用来处理数据和生成报告(excel);处理的数据可以是一个或多个文件;可以是直接来自标准输入,也可以通过管道获取标准输入;awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。
宜信技术学院
2019/06/19
1.2K0
详解Linux三剑客之awk
21.linux 文件管理命令:comm比较排序文件\fmt编排文本文件\tr转换字符
linux 文件管理命令:wc输出文件中的行数、单词数、字节数\comm比较排序文件\join将两个文件中指定栏位内容相同的行连接起来\fmt编排文本文件\tr转换字符
度假的小鱼
2025/01/13
1530
21.linux 文件管理命令:comm比较排序文件\fmt编排文本文件\tr转换字符
Linux中基本命令 原
3、man 命令:enter按行翻,空格按页翻;HOME/END键可以快速到首页/尾页(SecureCRT中无效);查找按 /要查找的内容,查找 下一个/上一个:按n/N;退出按q。
云飞扬
2019/03/13
7590
Linux-diff和diff3命令
将目录/usr/li下的文件”test.txt”与当前目录下的文件”test.txt”进行比较,输入如下命令:
小小工匠
2021/08/16
1.7K0
linux基础命令介绍二:输入与输出
在第一篇介绍命令行接口时,我们是这样描述CLI的:是一种通过在终端窗口中键入文本命令来实现与计算机交互的接口。 这里简要说明一下终端的概念,历史上,控制台与终端都是硬件。其中控制台(console)是计算机本身就有的设备,一台计算机只有一个控制台。计算机启动的时候,所有的信息都会显示到控制台上。而终端(terminal)属于外围设备(显示器和键盘),通常通过串口与计算机相连,然后对计算机进行操作。计算机操作系统中,与终端不相关的信息,比如内核消息,后台服务消息,不会显示到终端上。由于控制台与终端都起着显示信息的作用,于是随着时间的推移,它们之间的区别也越来越模糊。现在,计算机硬件越来越便宜,通常不再连接以前那种真正意义上的“终端设备”了,终端和控制台由硬件的概念,逐渐演化成了软件的概念。当前所说的终端,比如linux中的虚拟终端,都是软件的概念。 如上一篇中提到的命令who的输出:
用户5030870
2019/04/11
4K0
linux基础命令介绍二:输入与输出
【linux命令讲解大全】007.现代技术中的差异比较工具——diff
diff命令在最简单的情况下,用于比较给定的两个文件的不同。如果使用 “-” 代替 “文件” 参数,则要比较的内容将来自标准输入。diff命令以逐行的方式比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
全栈若城
2024/03/02
6010
dig、diff命令详解
@<服务器地址>:指定进行域名解析的域名服务器; -b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求; -f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息; -P:指定域名服务器所使用端口号; -t<类型>:指定要查询的DNS数据类型; -x<IP地址>:执行逆向域名查询; -4:使用IPv4; -6:使用IPv6; -h:显示指令帮助信息。
菲宇
2019/06/13
1.3K0
Vim给文件加行号,这通惊为天人的操作没sei了!文末天书慎点
本文展示了如何将行号插入到正文中,或者只插入到段落中。此外,还提供了打印行号的选项(Vim 可以打印带有数字的行,并且不需要文件有数字)。
程序员小助手
2020/05/17
2.6K0
linux运维中的命令梳理(三)
----------文本操作命令---------- sed命令:文本编辑工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数
洗尽了浮华
2018/01/23
8.2K0
Linux之diff命令
原文链接:https://rumenz.com/rumenbiji/linux-diff.html
入门笔记
2021/07/22
1.7K0
Linux好用的管道命令
1)在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
WHYBIGDATA
2023/01/31
9.6K0
Linux好用的管道命令
linux常用指令学习记录
locate会根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名,即所有包含该关键字的文件都将被输出。但是因为数据库的更新一般为一天一次,所以如果需要查找新的内容,需要用updatedb指令更新数据库,updatedb会根据/etc/updatedb.conf去查找硬盘内的文件名,并更新数据库文件
眯眯眼的猫头鹰
2018/10/31
1.4K0
相关推荐
Linux 命令(119)—— diff 命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档