在Linux中不带注释和空行的情况下打印文件
当我们使用cat命令在标准输出中显示源代码或者配置文件的内容时,我们将看到该文件中的所有内容,包括带注释的行和空行,对吗?
是的。
如果我们只想查看未注释的行而忽略所有其他行,该怎么办?
好了,可以忽略文件输出中的注释行和空行。
在此简短教程中,我们将了解如何在Linux中打印不带注释和空行的文件。
当我们要快速查看包含大量注释和空行的配置文件时,这将非常有用。
如何在打印文件时,不打印注释和空行。
什么是计算机编程中的注释?
如果查看源代码或者配置文件,我们会发现很多行都以星号“ *”或者哈希号“#”或者斜杠“ /”或者分号“;”开头。
这些行称为注释。
在计算机编程中,注释是人类可读的描述或者注释,用于阐明代码的用途。
它们可以帮助用户和其他程序员轻松地理解代码在做什么。
通常,注释和空行将被编译器和解释器忽略。
它们仅适用于程序员。
注释的语法在不同的编程语言中有所不同。
现在让我们看看如何排除或者跳过这些注释和空白行,仅显示未注释的行。
在Linux中打印没有注释和空行的文件
让我向我们展示我的Ubuntu系统之一中的sources.list文件的内容:
$cat /etc/apt/sources.list
输出示例:
# deb cdrom:[Ubuntu 18.04.2 LTS _Bionic Beaver_ - Release amd64 (20190210)]/bionic main restricted # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://it-mirrors.evowise.com/ubuntu/focal main restricted # deb-src http://in.archive.ubuntu.com/ubuntu/bionic main restricted ## Major bug fix updates produced after the final release of the ## distribution. deb http://it-mirrors.evowise.com/ubuntu/focal-updates main restricted # deb-src http://in.archive.ubuntu.com/ubuntu/bionic-updates main restricted ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team. Also, please note that software in universe WILL NOT receive any ## review or updates from the Ubuntu security team. deb http://it-mirrors.evowise.com/ubuntu/focal universe # deb-src http://in.archive.ubuntu.com/ubuntu/bionic universe deb http://it-mirrors.evowise.com/ubuntu/focal-updates universe # deb-src http://in.archive.ubuntu.com/ubuntu/bionic-updates universe ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and Jan not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## multiverse WILL NOT receive any review or updates from the Ubuntu ## security team. deb http://it-mirrors.evowise.com/ubuntu/focal multiverse # deb-src http://in.archive.ubuntu.com/ubuntu/bionic multiverse deb http://it-mirrors.evowise.com/ubuntu/focal-updates multiverse # deb-src http://in.archive.ubuntu.com/ubuntu/bionic-updates multiverse ## N.B. software from this repository Jan not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which Jan provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. deb http://it-mirrors.evowise.com/ubuntu/focal-backports main restricted universe multiverse # deb-src http://in.archive.ubuntu.com/ubuntu/bionic-backports main restricted universe multiverse ## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. ## This software is not part of Ubuntu, but is offered by Canonical and the ## respective vendors as a service to Ubuntu users. # deb http://archive.canonical.com/ubuntu bionic partner # deb-src http://archive.canonical.com/ubuntu bionic partner deb http://it-mirrors.evowise.com/ubuntu/focal-security main restricted # deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted deb http://it-mirrors.evowise.com/ubuntu/focal-security universe # deb-src http://security.ubuntu.com/ubuntu bionic-security universe deb http://it-mirrors.evowise.com/ubuntu/focal-security multiverse # deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse
我们是否看到很多行都用“#”字符注释掉了?
这会使文件的可读性降低。
这只是一个小文件,所以没什么大不了的。
但是,当我们读取很长的配置文件(例如“ httpd.conf”或者“ php.ini”)时,我们将不得不经过很多注释和空行,并且发现哪些行处于活动状态会有些混乱而哪些不是。
要过滤所有注释和空行以使其不显示在文件输出中,请使用grep命令,如下所示:
$grep "^[^#*/;]" /etc/apt/sources.list
其中
- 第一个^字符表示给定文件中行的开头,例如:/etc/apt/sources.list。
- [^#* /;]-将以除这四个字符“#”,“ *”,“ /”,“;”以外的任何字符开头的所有行开始显示。换句话说,所有以字符“#”,“ *”,“ /”,“;”开头的行将从输出中排除。
上面命令的输出示例:
deb http://it-mirrors.evowise.com/ubuntu/focal main restricted deb http://it-mirrors.evowise.com/ubuntu/focal-updates main restricted deb http://it-mirrors.evowise.com/ubuntu/focal universe deb http://it-mirrors.evowise.com/ubuntu/focal-updates universe deb http://it-mirrors.evowise.com/ubuntu/focal multiverse deb http://it-mirrors.evowise.com/ubuntu/focal-updates multiverse deb http://it-mirrors.evowise.com/ubuntu/focal-backports main restricted universe multiverse deb http://it-mirrors.evowise.com/ubuntu/focal-security main restricted deb http://it-mirrors.evowise.com/ubuntu/focal-security universe deb http://it-mirrors.evowise.com/ubuntu/focal-security multiverse
看到了吗?
所有注释和空白行都消失了。
现在,输出已经很容易理解了。
看下面的截图:
在左侧,我们会看到带有注释和空行的文件内容。
在右侧,使用“ grep”命令将忽略所有注释和空行。
我更喜欢使用grep方法来过滤输出中显示的不必要的行。
我们也可以使用awk和sed命令来执行此操作。
要使用“ awk”命令打印排除所有注释和空行的文件内容,请运行:
$awk ' ~ /^[^;#]/' /etc/apt/sources.list
输出示例:
要使用“ sed”命令显示不带注释的行开头,请运行:
$sed -e '/^#/d' /etc/apt/sources.list
有关更多用法的详细信息,请参见相应命令的手册页。
$man awk
$man grep
$man sed