如何用cat和grep打印非空行并显示行号?
问题分析与解决办法
为什么你的命令没显示行号?
嘿,我来帮你捋捋问题出在哪哈!你执行的命令cat -n catalog.txt | grep -v '^$' catalog.txt有个小疏忽:当你在grep后面加上catalog.txt时,grep会直接去读取这个文件的原始内容,完全忽略了前面管道传过来的、已经被cat -n加上行号的输出。相当于前面的cat -n白忙活了,grep只处理了原始文件,所以自然看不到行号~
正确的解决办法
这里给你几个可行的方案,随便选一个都能达到你的需求:
方案1:让grep处理管道输出
把grep后面的catalog.txt去掉,这样grep就会接收前面cat -n的输出,过滤掉空行的同时保留行号:
cat -n catalog.txt | grep -v '^$'
方案2:先过滤空行再加行号
反过来操作,先用grep过滤掉空行,再传给cat -n添加行号,效果完全一样:
grep -v '^$' catalog.txt | cat -n
方案3:用nl命令一步到位
其实还有个更省心的命令nl,它默认就会忽略空行,只给非空行添加行号,直接用这个就能搞定:
nl catalog.txt
执行后你就能得到想要的格式:
1 George Jones Berlin 2564536877 2 Mike Dixon Paris 2794321976
内容的提问来源于stack exchange,提问作者John M.
相关产品推荐
相关产品推荐

