在Linux中不带注释和空行的情况下打印文件

时间:2020-03-21 11:46:38  来源:igfitidea点击:

当我们使用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