ファイル名の一部を変数としてキャプチャする必要があります。

ファイル名の一部を変数としてキャプチャする必要があります。

私のディレクトリには、次の名前のCSVファイルがたくさんあります。

 s_m_u_supplemental_fields_account_9_4_2015_11_26_Error.csv
 s_m_u_supplemental_fields_account_9_4_2015_12_3_Error.csv
 s_m_u_academic_status_loa_8_29_2015_0_1_Error.csv

ファイル内の列に追加するには、「s_m_u_academic_status_loa」セクションをキャプチャする必要があります。 RegEx Testerでオンラインで式をテストし、"s/^\(s_([^_0-9]+_)+\)\([^\.]+\.csv\)$/\1/"必要な内容をキャプチャしましたが、何らかの理由でAIX kshでは機能しません。

これはこれまでのスクリプトです(AIX 6.2)。

#!/bin/ksh

ls *_Error.csv | while read i
do
    echo ${i}
    edfilename = `echo ${i} |sed -e "s/^\(s_([^_0-9]+_)+\)\([^\.]+\.csv\)$/\1/"`
    echo ${edfilename}
done

ベストアンサー1

これまでこのバージョンのスクリプトを試してみてください。

#!/bin/ksh
ls *_Error.csv | while read i
do  echo "${i}"
    edfilename=$(echo "${i}" | sed -e 's/^\(s_([^_0-9]*_)*\)\([^\.]*\.csv\)$/\1/')
    echo "${edfilename}"
done

aix sedがこれを理解していないよう+です*+\{1,\}

より単純なパターンで十分です。's/\([^0-9]*\)_.*/\1/'

おすすめ記事