我有一个文本文件,其中有很多文件路径。我需要提取所有目录(不包括文件名和扩展名),并从中创建一个新的文本文件。 目录深度可能有所不同,磁盘驱动器标签也可能有所不同。
我需要保留重复的东西!
由于目录深度差异很大,因此不确定采取哪种路由:awk,sed,grep
Input (sample.txt):
C:\lolz\yoloz\thisisit.txt
D:\Windows\Programs\Others\Hell\gate.exe
D:\Windows\Programs\Others\Hell\rain.exe
E:\Auto\Plane\Boat\transport.ini
Expected output:
C:\lolz\yoloz
D:\Windows\Programs\Others\Hell
D:\Windows\Programs\Others\Hell
E:\Auto\Plane\Boat
答案 0 :(得分:5)
这段简短的单行代码适用于您当前的示例:
sed 's/\\[^\\]\+$//' sample.txt
答案 1 :(得分:0)
这对我有用:
grep -o '[A-Z]\:[\\a-zA-Z0-9]*\\' sample.txt | sort | uniq
说明:
以驱动器号开头:[A-Z]
,后跟冒号\:
旁边是反斜杠,字母和数字的列表[\\a-zA-Z0-9]*
它必须以反斜杠结尾,以获取目录\\
显然,为了使其正常工作,您需要单引号。
grep -o
用于过滤grep输出。
sort | uniq
用于删除重复项。
答案 2 :(得分:0)
或者是没有外部工具的纯bash解决方案
while read -r line || [[ ${line} ]]; do
[[ ${line} =~ (.*)\\[^\\]* ]]
echo "${BASH_REMATCH[1]}"
done
答案 3 :(得分:0)
awk '{sub(/.{9}$/,"")sub(/\\t.?../,"")}1' file
C:\lolz\yoloz
D:\Windows\Programs\Others\Hell
D:\Windows\Programs\Others\Hell
E:\Auto\Plane\Boat