如何提取模式第 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

basenamedirname打印作为参数给出的文件名的最后部分和除最后部分之外的所有部分,因此:

$ dirname "/Folder/F1/F2/F3/F4/.../Fn/abc.txt" 
/Folder/F1/F2/F3/F4/.../Fn

(或来自文件dirname "$(< pathname.txt)" :)

相关内容