ファイル名を切り取るAWKコマンド

ファイル名を切り取るAWKコマンド
fileName=20201211-v1-ABC144_newrecords_2020-12-10_12-51-32-000_2444_511
fName1=$(echo $fileName | awk -F"-" '{ print $3 }')

ファイル名を$ 3から有効期限の値に減らしました。

次のファイル名が必要です。

ABC144_newrecords_2020-12-10_12

ベストアンサー1

パターンに沿った文字列部分を抽出するには、次のようにしますexpr

expr " $fileName" : '[^-]*-[^-]*-\(.*_[0-9]\{4\}-[01][0-9]-[0-3][0-9]\)_'

-(ここでは2番目以降から一番右に出てくる部分を抽出します。_YYYY-MM-DD__トレーリングは除く))

または以下を使用してzsh

set -o extendedglob
[[ $fileName = (#b)[^-]#-[^-]#-(*_[0-9](#c4)-[01][0-9]-[0-3][0-9])_* ]] &&
  print -r - $match[1]

または:

set -o rematchpcre
[[ $fileName =~ '^.*?-.*?-(.*_\d{4}-[01]\d-[0-3]\d)_' ]] &&
  print -r - $match[1]

または以下を使用してksh93

printf '%s\n' "${fileName/#*([^-])-*([^-])-@(*_{4}(\d)-[01][0-9]-[0-3][0-9])_*/\3}"

または以下を使用してbash

[[ $fileName =~ ^[^-]*-[^-]*-(.*_[0-9]{4}-[01][0-9]-[0-3][0-9])_ ]] &&
  printf '%s\n' "${BASH_REMATCH[1]}"

おすすめ記事