【问题标题】:Number lines and hide the empty ones编号行并隐藏空行
【发布时间】:2020-01-04 17:26:31
【问题描述】:

我正在尝试对 txt 文件的行编号并隐藏空行。我使用此代码:

cat -n file.txt | grep . file.txt

但它不起作用。它忽略 cat 命令。我想显示所有非空行并对它们进行编号(txt 文件不是静态文件,就像用户可以输入的列表)。

编辑:鉴于以下出色的解决方案,我还要补充一点,grep . file.txt | cat -n 也有效。

【问题讨论】:

  • 请用 a) 来自file.txt 的一些样本数据和 b) 所需的输出来更新问题

标签: linux bash


【解决方案1】:

我假设您想对删除空行后剩余的行进行编号。

解决方案 #1

使用sed '/^$/d' 删除空行,然后将其输出通过管道传输到cat -n 以对其进行编号:

sed '/^$/d' file.txt | cat -n

sed 程序只包含一个命令:d(删除该行)。 sed 命令可以以零个、一个或两个地址作为前缀,这些地址表明该命令适用于哪些行。

在这种情况下,只有一个地址/^$/。它是一个regex(包含在/ 中),用于选择空行;行首 (^) 后跟行尾 ($) 的行。

解决方案 #2

您也可以使用grep -v '^$' 过滤掉空行:

grep -v '^$' file.txt | cat -n

同样,^$ 是一个匹配空行的正则表达式。 -v 反转条件并告诉grep 显示与regex 不匹配的行。


上面的命令不会修改文件。他们读取file.txt的内容,对其进行处理并将结果显示在屏幕上。

更新

正如@robc 在评论中所建议的那样,nl 甚至比 cat -n 更好地为行编号。谢谢@robc,直到现在我才知道nl(我也不知道cat -n)。学习新事物永远不会太晚。

【讨论】:

  • 如果您想更好地控制格式,请使用管道连接到 nl 而不是 cat -n
【解决方案2】:

这可以通过awk 轻松完成。这将打印带有行号的行并忽略空行。

awk 'NF{print FNR,$0}' file.txt

说明:为上述代码添加详细说明。

awk '             ##Starting awk program from here.
NF{               ##Checking condition if NF(number of fields) is NOT NULL in current line then do following.
 print FNR,$0     ##Printing current line number by mentioning FNR and then current line value.
}
' file.txt        ##Mentioning Input_file name which we are passing to awk program here.

【讨论】:

猜你喜欢
  • 2023-02-14
  • 2019-10-05
  • 2012-10-28
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2016-02-13
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多