次のファイルパス名があります。
/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
。