私のディレクトリには、次の名前の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/'