파일 이름의 일부를 변수로 캡처해야 합니다.

파일 이름의 일부를 변수로 캡처해야 합니다.

내 디렉터리에 다음 이름을 가진 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/'

관련 정보