ファイルパスの途中で6桁の数字を取得する方法

ファイルパスの途中で6桁の数字を取得する方法

次のファイルパス名があります。

/dbfs/mnt/dlg2stage/foldername/backupname/201906_load_1_20210623-151602.tar.tgz

201906 6桁の数字だけを求めて印刷しようとしています。試しましたが失敗sedしましたawk

ベストアンサー1

これがシステムの実際のファイルであると仮定すると、_シェルループを使用して、一致するディレクトリ内の各ファイルの最初のファイル名の前の部分を簡単に抽出できます。*_*.tar.tgz/dbfs/mnt/dlg2stage/foldername/backupname

for pathname in /dbfs/mnt/dlg2stage/foldername/backupname/*_*.tar.tgz; do
    name=$( basename "$pathname" )
    printf '%s\n' "${name%%_*}"
done

このbasenameユーティリティは、パス名のファイル名部分を提供します。示した例では、文字列を201906_load_1_20210623-151602.tar.tgz変数に割り当てますname。を使用name=${pathname##*/}して同じことを行うこともできます(このパラメータ拡張は文字列の最初の部分を$pathname最後の部分まで削除します/)。

パラメータ拡張の${name%%_*}ため、_*最も長い末尾の部分文字列一致はvalueから削除されます$name。表示されている例では、最初の_文字とその右側のすべての文字を削除し、部分文字列を残してを201906使用して印刷できますprintf

おすすめ記事