Я хочу изменить формат даты в содержимом 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>
Это происходит потому, что реализация OS X date
Команда взята из семейства BSD. Поскольку вы вводите только одну строку за раз, можно безопасно использовать вместо этого параметр -d:
date -d `echo "$line" | sed -e 's/<date>//' -e 's-</date>--'` '+%B %d'
Предполагается, что ваш формат ввода остается совместимым между двумя date
реализации. Если это не так, вам сначала нужно получить его в другом формате.