Linux

替換 Linux 伺服器上 XML 文件中的日期

  • January 22, 2013

我想將 XML 文件內容中的日期格式從2013-01-21更改為January 21

以下腳本適用於我的 mac,但不適用於 linux 伺服器(我將把它作為日常 cron 作業執行)。

#!/bin/bash

while read line; do
 case "$line" in
   '<date>'*)
     echo '<date>'
     date -j -f %F `echo "$line" | sed -e 's/<date>//' -e 's-</date>--'` '+%B %d'
     echo '</date>'
     ;;
   *)
     echo "$line"
     ;;
 esac
done < file.xml > newfile.xml

我得到的錯誤是date: illegal option -f

有沒有辦法讓它在 linux 伺服器上工作?

XML文件的片段:

 <show>
   <recordKey>SWTZ-TD-FA32DE3DE4701567</recordKey>
   <name><![CDATA[Turnstyle Music Group Presents: bandname]]></name>
   <city><![CDATA[New York]]></city>
   <venueName><![CDATA[The National Underground]]></venueName>
   <venueNameExt><![CDATA[Downstairs]]></venueNameExt>
   <showType><![CDATA[Bar / Pub]]></showType>

   <venueZip></venueZip>
   <venuePhone></venuePhone>
   <venueAddress><![CDATA[159 E Houston St.]]></venueAddress>
   <ticketURI><![CDATA[]]></ticketURI>
   <description><![CDATA[]]></description>
   <ageLimit>21+</ageLimit>
   <venueURI><![CDATA[http://www.thenationalunderground.com]]></venueURI>
   <ticketPrice><![CDATA[$5 , $10 at the door]]></ticketPrice>

   <date>2011-09-30</date>
   <timeSet>20:30:00.0000000</timeSet>
   <gmtDate>2011-10-01 00:30:00</gmtDate>
   <showtimeZone>America/New_York</showtimeZone>
   <timeDoors></timeDoors>
   <directLink><![CDATA[]]></directLink>
   <posterImage></posterImage>
   <lastUpdate>2011-09-21 10:46:23</lastUpdate>

   <stateAbbreviation>NY</stateAbbreviation>
   <state>New York</state>
   <countryAbbreviation>US</countryAbbreviation>
   <country>United States</country>
   <timeZone>America/New_York</timeZone>
   <deposit>No Deposit</deposit>
   <depositReceived><![CDATA[0.00]]></depositReceived>


   <artistname><![CDATA[bandname]]></artistname>
   <artistKey>AR-96F8FB907FA90202</artistKey>
 </show>

發生這種情況是因為該date命令的 OS X 實現取自 BSD 系列。由於您一次只輸入一行,因此使用 -d 參數應該是安全的:

date -d `echo "$line" | sed -e 's/<date>//' -e 's-</date>--'` '+%B %d'

這是假設您的輸入格式在兩種date實現之間保持兼容。如果不是,您需要先以不同的格式獲取它。

引用自:https://serverfault.com/questions/471246