我想对所有不包含字符“ b”或“ c”的行进行编号。该怎么做?
我的第一个想法是写这个:
ls -l | nl -bp'[!bc]'
因为没有感叹号,所以只对确实包含字符“ b”或“ c”的行编号。我以为感叹号会反此编号,但事实并非如此。
我需要某种方式将其求逆,以便它将不包含这些字符的行编号。您可以使用nl -bp编写此命令吗?
答案 0 :(得分:2)
完全由允许的字符组成的数字行。
ls -l | nl -bp'^[^bc]*$'
[^bc]
匹配既不是b
也不是c
的任何字符。如果是[bc]
,则仅匹配b
和c
。 ^
negates a character class,因此[^bc]
与不是 b
或c
的任何内容匹配。
前面的^
和$
是anchors。他们要求整行匹配,而不仅仅是行的一部分。
请注意,^
的这种使用与方括号内的^
完全无关。不幸的是重复使用了相同的符号。一个是锚,另一个是字符类否定。
*
与上一项的zero or more相匹配。您之前可能已经看过.*
,它与所有内容都匹配,因为dot与任何单个字符都匹配。此处的用法类似,只是我们使用.
代替[^bc]
。
答案 1 :(得分:1)
带有awk
表达式:
ls -l | awk '/^[^bc]*$/{ $0 = ++c FS $0 }1'
或与否定的正则表达式相同的>
ls -l | awk '!/[bc]/{ $0 = ++c FS $0 }1'
答案 2 :(得分:0)
自从您使用 ls 以来,我想您要打印文件夹中的所有文件。 您可以使用:ls -l | grep -v“ [bc]”。