Linux 不带文件扩展名的wc-l的输出

Linux 不带文件扩展名的wc-l的输出,linux,bash,cut,file-extension,wc,Linux,Bash,Cut,File Extension,Wc,我有以下几行: wc -l ./*.txt | sort -rn 我想剪切文件扩展名。通过这段代码,我得到了输出: 数字filename.txt 对于。-目录中的所有my.txt文件。但我希望输出不带文件扩展名,如下所示: 数字文件名 我尝试了一个不同类型参数的管道,但是我得到的只是用这个命令剪切整个文件名 wc -l ./*.txt | sort -rn | cut -f 1 -d '.' 更好的方法是使用适当的mime类型(什么是tar.gz的扩展还是这样的多扩展?) 这是一个POC,

我有以下几行:

wc -l ./*.txt | sort -rn 
我想剪切文件扩展名。通过这段代码,我得到了输出: 数字filename.txt

对于。-目录中的所有my.txt文件。但我希望输出不带文件扩展名,如下所示: 数字文件名

我尝试了一个不同类型参数的管道,但是我得到的只是用这个命令剪切整个文件名

wc -l ./*.txt | sort -rn | cut -f 1 -d '.'

更好的方法是使用适当的mime类型(什么是
tar.gz
的扩展还是这样的多扩展?)


这是一个POC,未经测试,可以随意调整/改进/修改

不幸的是,
cut
没有根据末尾的索引提取列的语法。一个(有点笨重)技巧是使用
rev
反转行,对其应用
cut
,然后将其还原:

wc -l ./*.txt | sort -rn | rev | cut -d'.' -f2- | rev

假设文件名中没有换行符,可以使用
sed
删除结尾
.txt

wc -l ./*.txt | sort -rn | sed 's/\.txt$//'

以更通用的方式使用
sed
来切断文件的任何扩展名:

$ wc -l *.txt | sort -rn | sed 's/\.[^\.]*$//'
 14 total
  8 woc
  3 456_base
  3 123_base
  0 empty_base

这并不完全是我想要的,但无论如何还是要感谢你的帮助。谢谢你的帮助,我使用了rev命令,但是sed也可以工作!这是您的选择,但是使用
rev+cut+rev
(3个命令)来代替单个
sed
,是完全不必要和低效的。这是事实。我现在用sed替换了rev。输出相同,但代码更少。
$ wc -l *.txt | sort -rn | sed 's/\.[^\.]*$//'
 14 total
  8 woc
  3 456_base
  3 123_base
  0 empty_base