使用find+grep提取文件名前8字符输出至txt失败,原因何在?
问题原因与解决方法
哦,我懂你为啥遇到这个问题了——你对grep的用法理解偏了!
原命令为啥不生效?
你写的grep "^........"里,每个.代表任意单个字符,^是锚定行首位置。这个表达式的作用是筛选出那些行首至少有8个字符的完整行,而不是把文件名截断到前8个字符。它只会把长度不足8的行过滤掉,剩下的完整文件名(含路径)都会原封不动输出,所以你看到的还是完整内容。
正确的实现方式
这里给你几种靠谱的方法,按需选择:
方法1:用cut提取字符(最直观)
cut命令专门用来截取文本片段,-c1-8表示提取每行的第1到第8个字符:
find . -type f -print | cut -c1-8 > test.txt
方法2:直接用find的-printf(更高效,无需管道)
find自带的-printf选项可以直接格式化输出,不用额外启动其他进程:
- 如果要提取完整路径的前8个字符:
find . -type f -printf "%.8p\n" > test.txt - 如果只想提取**文件名(不含路径)**的前8个字符:
find . -type f -printf "%.8f\n" > test.txt
(说明:%p代表文件的完整路径,%f代表仅文件名,%.8表示取前8个字符)
方法3:用sed做替换截取
利用sed的正则替换功能,捕获行首8个字符并替换整行:
find . -type f -print | sed 's/^\(.\{8\}\).*/\1/' > test.txt
内容的提问来源于stack exchange,提问作者user5719890
相关产品推荐
相关产品推荐

