2015-08-27 105 views
0

我在我的UNIX shell腳本中使用此sed命令行來將變量值附加到文件中的現有行。sed命令不適用於1場景

sed "s/.*/&$OptionalCols/" header_scrubbed_vendor_list.dat \ 
    >>final_header_scrubbed_vendor_list_${TODAY}.dat 

其中OptionalCols值是從下面

OptionalCols=`head -1 ${INDIR}Direct_Target_List_*.dat |cut -d'|' -f 19-48` 

的追加任務正在爲所有完美的罰款牽強。但它不適用於低於一個。 。

和第一線Direct_Target_List _ * dat文件是

CID|FirstName|MiddleName|LastName|Suffix|Specialty|AddressLine1|AddressLine2|City|State|ZipCode|Phone|Fax|MENumber|NPINumber|EmailAddress|StateLicenseNumber|GSKBrandPAR|ProfessionalDesignatio|Segment Name |GLP-User Flag|Tanzeum Action Group|Tanzeum See-status|Total_Access_042014to032015|SF_Access_042014to032015|SF_access_012015to032015|Received Samples|Tanzeum Engagers|Tanzeum Writers|NRx_201410to201503|TRx_201410to201503|DM_BRC_dont_use|Email_DMD_Match|CT_Mayo_Match|CT_FPN_Match|CT_IMN_Match|CT_Cons_Match|T/C|Group|Email_Segments|DM_Segments|Alerts_Segments 

錯誤我得到是

sed的:命令亂碼:■/.*/ & ProfessionalDesignatio |段名稱 | GLP - 用戶標籤| Tanzeum Action Group | Tanzeum See-status | Total_Access_042014to032015 | SF_Access_042014to032015 | SF_access_012015to032015 |收到 樣本| Tanzeum Engagers | Tanzeum 作家| N Rx_201410to201503 | TRx_201410to201503 | DM_BRC_dont_use | Email_DMD_Match | CT_Mayo_Match | CT_FPN_Match | CT_IMN_Match | CT_Cons_Match | T/C |集團| Email_Segments | DM_Segments | Alerts_Segments/

不要任何人有想法,爲什麼這是happenning?

+0

當header_scrubbed_vendor_list.dat只有1行時,可以跳過使用sed。 –

回答

1

T/C中的斜線可能被認爲是分隔符。這是一種棘手的看,所以這裏是一個摘錄:

...CT_Cons_Match|T/C|Group... 

你可以讓sed使用不同的分隔符。選擇一個保證不在輸入中的。例如:

sed -e 's#regex#replacement#' 
3

您需要爲s命令使用不同的分隔符。替換中的/被解釋爲命令的結尾,並且以下C|Group|Email_Segments|...對解釋器沒有意義。

要麼將​​您的替換與您知道不會包含在變量中的內容進行分隔 - 例如, !這裏:

sed -e "s!\$!$OptionalCols!" infile >>outfile 

或按摩變量與\/更換/代時:

sed -e "s/\$/${OptionalCols//\//\\\/}/" infile >>outfile 

或者,如果這是難以閱讀,兩者的結合:

sed -e "s!\$!${OptionalCols//!/\\!}!" infile >>outfile 

(我也將s/.*/&.../更改爲s/$/.../以減少工作量)。

+1

或者,如果它是GNU sed,只需使用'a'命令... –