Назад | Перейти на главную страницу

заменить даты в файле XML на сервере Linux

Я хочу изменить формат даты в содержимом 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 реализации. Если это не так, вам сначала нужно получить его в другом формате.