さまざまなファイルの通知ファイルを受け取ります。他のプロセスで使用するために、これらの通知ファイルからファイル名を抽出したいと思います。通知ファイルの最初の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
に設定されます。NotificationFile
2行目はfilename
最初からすべてを削除し.csv
、再度追加して.csv
補償します。