На следующий день пользователя ввел дату - дата +1 день

Вам не нужно patch для этого; это для извлечения изменений и пересылки их без неизменной части файла.

Инструмент для слияния двух версий файла merge, но как @vonbrand записал, Вам нужен "основной" файл от который Ваши две отличенные версии. Чтобы сделать слияние без него, использовать diff как это:

diff -DVERSION1 file1.xml file2.xml > merged.xml

Это включит каждый набор изменений в C-стиле #ifdef/#ifndef команды "препроцессора", как это:

#ifdef VERSION1
<stuff added to file1.xml>
#endif
...
#ifndef VERSION1
<stuff added to file2.xml>
#endif

Если строка или регион будут отличаться между этими двумя файлами, то Вы получите "конфликт", который похож на это:

#ifndef VERSION1
<version 1>
#else /* VERSION1 */
<version 2>
#endif /* VERSION1 */

Поэтому сохраните вывод в файле и откройте его в редакторе. Поиск любых мест, где #else подходит, и разрешите их вручную. Затем сохраните файл и прокрутите его grep -v избавиться от остающегося #if(n)def и #endif строки:

grep -v '^#if' merged.xml | grep -v '^#endif' > clean.xml

В будущем сохраните исходную версию файла. merge может дать Вам намного лучшие результаты с помощью дополнительной информации. (Но быть осторожным: merge редактирования один из оперативных файлов, если Вы не используете -p. Прочитайте руководство).

5
11.07.2015, 05:27
5 ответов

Вполне уверенный AIX не имеет даты GNU по умолчанию. В зависимости от Вашей версии жемчуга можно сделать:

perl -MTime::Piece -MTime::Seconds -le '
    $tomorrow = Time::Piece->strptime($ARGV[0], "%Y/%m/%d") + ONE_DAY;
    print $tomorrow->ymd("/")
' 2013/10/28

Так, в ksh

#!/bin/ksh
read date?"Enter the date (YYYY/MM/DD): "
tomorrow=$(
    perl -MTime::Piece -MTime::Seconds -le '
        $tomorrow = Time::Piece->strptime($ARGV[0], "%Y/%m/%d") + ONE_DAY;
        print $tomorrow->ymd("/")
    ' "$date"
)
echo "Tomorrow is $tomorrow"

Выполнение этого похоже:

Enter the date (YYYY/MM/DD): 2013/12/31
Tomorrow is 2014/01/01

Протестированный на старой версии ksh и жемчуга

$ what /usr/bin/ksh
/usr/bin/ksh:
        Version M-11/16/88i
        SunOS 5.8 Generic 110662-24 Apr 2007
$ perl --version

This is perl, v5.10.0 built for sun4-solaris
0
27.01.2020, 20:44
  • 1
    Никакой контроль ввода не выполняется здесь, поэтому если пользователь введет неправильный формат даты, то жемчуг будет жаловаться. –  glenn jackman 28.10.2013, 19:53
  • 2
    : Мне не установили модули жемчуга в машине, которую я использую. Так есть ли любой способ достигнуть этого без жемчуга. –  cm60 28.10.2013, 19:59
  • 3
    Вы проверяли? Я полагаю что Время:: Часть и Время:: Секунды являются базовыми модулями Perl. –  glenn jackman 28.10.2013, 20:06
  • 4
    Да. Я попробовал его ранее, я получал модули жемчуга, не найденные ошибками. У меня нет доступа администратора для той машины для установки модулей жемчуга. –  cm60 28.10.2013, 20:35
  • 5
    : можно ли помочь мне отредактировать вышеупомянутую часть кода. –  cm60 28.10.2013, 20:37

Можно попробовать следующее:

currDate=$(date); nextDay=$(date -d "$currDate + 1 day" +"%Y-%m-%d"); echo "$nextDay"
-1
27.01.2020, 20:44
printf "Enter the date (YYYY/MM/DD):" ; read user_date

desired_date=`date --date="$user_date+1 day" +"%Y/%m/%d"`

echo "Tomorrow's Date is $desired_date"
-1
27.01.2020, 20:44
  • 1
    Не на AIX Вы не можете. Это работало бы над Linux. –  Gilles 'SO- stop being evil' 29.10.2013, 01:49
[112264] Используя Perl-подход, только с очень базовыми/общими модулями ([112739] Time::Local[112740] и [112741]POSIX[112742]):

Пример:

Если у вас нет модуля [112743]Time::Local[112744], это все равно можно сделать с немного большей болью. Однако, модуль [112745]POSIX[112746] ([112747]strftime[112748]) является обязательным, так как он является "умной" частью вещи. Без него было бы трудно перейти от "28-feb" к "01-mar".[112269].

0
27.01.2020, 20:44

С относительно недавними версиями ksh93:

$ printf "%(%Y/%m/%d)T\n" "2014/06/20 +1 day"
2014/06/21

Или:

$ printf "%(%Y/%m/%d)T\n" "2014/06/20 next day"
2014/06/21  
$ printf "%(%Y/%m/%d)T\n" "2014/06/20 tomorrow"
2014/06/21
2
27.01.2020, 20:44

Теги

Похожие вопросы