没有文件扩展名的wc -l的输出

时间:2016-10-18 11:29:23

标签: linux bash cut file-extension wc

我有以下几行:

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

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

表示。-directory中的所有.txt文件。但我希望输出没有文件扩展名,如下所示: 数字文件名

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

不幸的是,cut没有根据结尾的索引提取列的语法。一个(有点笨重)的技巧是使用rev来反转该行,将cut应用于它,然后再rev

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

使用正确的 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 ,未经测试,随意调整/改进/修改