別のファイル名からファイル名を抽出する

別のファイル名からファイル名を抽出する

さまざまなファイルの通知ファイルを受け取ります。他のプロセスで使用するために、これらの通知ファイルからファイル名を抽出したいと思います。通知ファイルの最初の4つの文字列は常に無視されます。したがって、ファイル名は場所5から始まり、任意の文字で始まり、.で終わることができます.csv

一例:

NotificationFile = 'NFT_PPF_STANDARD_1720156B_NBIRNans_DFT_TILT_EOF_FFP_20160619-10.csv_16062000352520'
NotificationFile = 'NFT_PPF_IMPULSE_172555A_Acc_Account_FFP_20160619-10.csv_16062000352520'
NotificationFile = 'NFT_PPF_IMPULSE_172555A_CRI_Position_FFP_20160619-10.csv_16062000352520'

ファイル名は次のとおりです。

Filename = 'NBIRNans_DFT_TILT_EOF_FFP_20160619-10.csv'
Filename = 'Acc_Account_FFP_20160619-10.csv'
Filename = 'CRI_Position_FFP_20160619-10.csv'

次のコマンドを使用して通知ファイル名からファイル名を抽出しましたが、ファイル名に「_」が3つしか含まれていない場合にのみ機能します。

Extract = echo $NotificationFile | cut -d "_" -f5-8
# $NotificationFile is the NotificationFile above
# Extract should be equal to Filename 

すべてのファイル名の長さに使用できる一般的なコマンドは何ですか?

答え1

必要に応じて使用できますsed

sed -ne 's/.*\(NB.*\)\_.*$/\FILENAME = \1 /p' 

答え2

すべてのファイル名がで終わり、.csvどこにも他のファイル名が含まれていない場合は、.csv次のようにします。sed後ですべてを削除します。

Extract=$(echo $NotificationFile | sed 's/\.csv.*/.csv/')

これを前のコンテンツと組み合わせてください。

Extract=$(echo $NotificationFile | sed 's/\.csv_.*/.csv/' | cut -d "_" -f5-)

範囲はN-「行末まで」を意味します。_ファイル名に正確に3がないと、8番目で停止しません。

答え3

文字列操作構造の使用パラメータ拡張

filename="${NotificationFile#????}"
filename="${filename%.csv*}.csv"

最初の行は最初の4文字が削除された値filenameに設定されます。NotificationFile2行目はfilename最初からすべてを削除し.csv、再度追加して.csv補償します。

関連情報