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

相關內容