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

Output of wc -l without file-extension

我得到以下行:

wc -l ./*.txt | sort -rn 

我想剪掉文件扩展名。所以使用这段代码我得到了输出: 数 filename.txt

我在 .- 目录中的所有 .txt 文件。但我想要没有文件扩展名的输出,如下所示: 编号文件名

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

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

使用正确的 mime 类型 的更好方法(tar.gz 的扩展名是什么或此类多扩展名?)

#!/bin/bash

for file; do
    case $(file -b $file) in
        *ASCII*) echo "this is ascii" ;;
        *PDF*)   echo "this is pdf" ;;
        *)       echo "other cases" ;; 
    esac
done

这是一个 POC,未经测试,请随意 adapt/improve/modify

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

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