我有一个文本文件中的文件列表。如何从此文本文件中仅获取文件夹名称? (同名文件夹将写入一次)
/lib/i386-linux-gnu/libwrap.so.0.7.6
/lib/i386-linux-gnu/libbsd.so.0
/lib/i386-linux-gnu/libdbus-1.so.3.19.4
/lib/i386-linux-gnu/libexpat.so.1.6.7
/usr/bin/rakconvert
/usr/bin/python-config
/usr/bin/winecpp
/usr/bin/wine
/usr/bin/regedit
/usr/bin/pycompile
/usr/bin/msiexec
该文件的内容1.txt
。如果我想要的输出:
/lib/i386-linux-gnu/
/usr/bin
我所做的所有搜索都是关于将文件列表发送到文件。 “cat,dirname”等。我没有在这里添加它们,因为我使用了很多代码。
抱歉我的问题没有问清楚。谢谢
答案1
将此视为纯粹的文本处理问题(即忽略 Unix 文件名可以包含换行符的事实,这就是您通常不会在文本文件中存储路径名的原因,除非您知道它们是正常的),我们可以删除最后一个/
字符之后的任何内容在每一行上并通过获得独特的结果
$ sed 's,/[^/]*$,,' 1.txt | sort -u
/lib/i386-linux-gnu
/usr/bin
该sed
表达式s,/[^/]*$,,
(也可以写成s/\/[^/]*$//
)将删除任何匹配的内容/[^/]*$
,即斜杠后跟任意数量的非斜杠字符(直到行尾)。
最后对sort -u
结果进行排序,仅保留唯一的条目。如果数据已经排序,您可以使用uniq
它。