パターンの N 番目と M 番目の出現の間の文字列を抽出するにはどうすればよいでしょうか?

パターンの N 番目と M 番目の出現の間の文字列を抽出するにはどうすればよいでしょうか?

ファイルへのパス(txt ファイルとします)を含むファイル path.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)" )

関連情報