如何为文本中没有字符“ b”和“ c”的所有行编号?

我想对所有不包含字符“ b”或“ c”的行进行编号。该怎么做?

我的第一个想法是写这个:

ls -l | nl -bp'[!bc]'

因为没有感叹号,所以只对确实包含字符“ b”或“ c”的行编号。我以为感叹号会反此编号,但事实并非如此。

我需要某种方式将其求逆,以便它将不包含这些字符的行编号。您可以使用nl -bp编写此命令吗?

urboat19 回答:如何为文本中没有字符“ b”和“ c”的所有行编号?

完全由允许的字符组成的数字行。

ls -l | nl -bp'^[^bc]*$'
  • [^bc]匹配既不是b也不是c的任何字符。如果是[bc],则仅匹配bc^ negates a character class,因此[^bc]不是 bc的任何内容匹配。

  • 前面的^$anchors。他们要求整行匹配,而不仅仅是行的一部分。

    请注意,^的这种使用与方括号内的^完全无关。不幸的是重复使用了相同的符号。一个是锚,另一个是字符类否定。

  • *与上一项的zero or more相匹配。您之前可能已经看过.*,它与所有内容都匹配,因为dot与任何单个字符都匹配。此处的用法类似,只是我们使用.代替[^bc]

,

带有awk表达式:

ls -l | awk '/^[^bc]*$/{ $0 = ++c FS $0 }1'

或与否定的正则表达式相同的>

ls -l | awk '!/[bc]/{ $0 = ++c FS $0 }1'
,

自从您使用 ls 以来,我想您要打印文件夹中的所有文件。 您可以使用:ls -l | grep -v“ [bc]”。

本文链接:https://www.f2er.com/3158078.html

大家都在问