У меня есть файл path.txt с путем к файлу (скажем, txt-файлу):
/Folder/F1/F2/F3/F4/.../Fn/abc.txt
Я хочу извлечь путь, т.е. строку от начала до последнего вхождения /
(так как количество папок в пути может различаться).
Я хочу получить:
/Folder/F1/F2/F3/F4/.../Fn
Что будет лучшим выбором: sed/awk/perl/vi и как?
решение1
Если вы хотите использовать один из упомянутых вами инструментов, вы можете сделать это с помощью sed
:
echo "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" | sed "s/\/[^/]*$//"
sed -i "s/\/[^/]*$//" path.txt
Если вы работаете в bash, вы можете использовать для этого расширение параметров Bash:
path=$(cat path.txt)
echo "${path%/*}"
И как уже упоминалосьиккачувы можете использовать dirname
.
решение2
basename
и dirname
вывести последнюю и предпоследнюю части имени файла, указанного в качестве аргумента, например:
$ dirname "/Folder/F1/F2/F3/F4/.../Fn/abc.txt"
/Folder/F1/F2/F3/F4/.../Fn
(или из файла: dirname "$(< pathname.txt)"
)