我有以下几行:
wc -l ./*.txt | sort -rn
我想剪切文件扩展名。所以使用这段代码,我得到了输出: number filename.txt
表示。-directory中的所有.txt文件。但我希望输出没有文件扩展名,如下所示: 数字文件名
我为不同类型的参数尝试了一个带切割的管道,但我得到的就是用这个命令剪切整个文件名。
wc -l ./*.txt | sort -rn | cut -f 1 -d '.'
答案 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 ,未经测试,随意调整/改进/修改