特定のパターンでファイル名の一部を抽出する方法は?

特定のパターンでファイル名の一部を抽出する方法は?

現在作業中の場所のファイル名の一部を抽出しようとしていますが、予想される出力とは機能しません。

サンプル:

ls -a *0728*dat | ls -a *0728*dat |種類

amnbmnbm_jnjmnm_sd_07282019_14_13_17.dat
amnbmnb_kjhkj_07282019_11_23_22.dat
njnkjnjk_AbnBCBB_DE_07282019_07_09_04.dat

ファイル名からファイル部分、病棟日の左側のすべての項目(アンダースコア(_)を含む)を抽出して変数に割り当てたいと思います。

希望の出力:

変数ファイルは、forループに渡すために値を保持するために必要なファイルです。

文書:

amnbmnbm_jnjmnm_sd_
amnbmnb_kjhkj_
njnkjnjk_AbnBCBB_DE_


for file_name in "${file[@]}"
do

echo " file_name=$file_name"

done

希望の出力:

amnbmnbm_jnjmnm_sd_
amnbmnb_kjhkj_
njnkjnjk_AbnBCBB_DE_

ベストアンサー1

おそらく:

for file_name in *0728*dat
do
  printf '%s\n' "${file_name%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]_[0-9][0-9].dat}"
done

これにより、各ファイル名の末尾に8桁、アンダースコア、2桁、アンダースコア、2桁、アンダースコア、2桁、。などのパターンが削除されます.dat

おすすめ記事