Shell
需要將部分文件名擷取到變數中
我在一個目錄中有一堆這樣命名的 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”部分以附加到文件內的列。我
"s/^\(s_([^_0-9]+_)+\)\([^\.]+\.csv\)$/\1/"
線上測試了 RegEx Tester 中的表達式,並確實擷取了我需要的內容,但由於某種原因,它無法在 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
到目前為止,您可以嘗試此版本的腳本
#!/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,\}
which 可能適用於 aix。一個更簡單的模式就足夠了:
's/\([^0-9]*\)_.*/\1/'