Shell

需要將部分文件名擷取到變數中

  • September 7, 2015

我在一個目錄中有一堆這樣命名的 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/'

引用自:https://unix.stackexchange.com/questions/228114