Как извлечь строку между N-м и M-м вхождениями шаблона?

Как извлечь строку между N-м и M-м вхождениями шаблона?

У меня есть файл 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)" )

Связанный контент