我的目录中有一堆 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,\}
它可以在 aix 上运行。
一个更简单的模式就足够了:'s/\([^0-9]*\)_.*/\1/'