Perl на помощь :Выведите все строки между первой xyz
и последнейEnd
:
perl -ne '
$inside = 1 if /^xyz$/;
$seen_end = 1 if $inside && /^End$/;
push @buff, $_ if $inside;
print splice @buff if /^End$/ && @buff;
' input-file
С первого появления xyz
,мы начинаем помещать все строки в буфер. Как только встречается End
, мы выводим и очищаем буфер (, см. склейку ), но мы продолжаем помещать строки в буфер на случай, если позже появится еще один End
.
Проблема здесь, похоже, связана с одинарными -кавычками в$DATEJ
. Ваша переменная накладывает их.
Измените это на
DATEJ=`echo -n "2012-03-02 22:00"`
и в финальной команде:
date -d "$DATEJ EDT" +%s
Это сработает:
$ date -d '2012-03-02 22:00 EDT' +%s
1330740000
$ DATEJ=`echo -n "2012-03-02 22:00"`
$ echo $DATEJ
2012-03-02 22:00
$ date -d "$DATEJ EDT" +%s
1330740000
На самом деле, вам не нужно echo
дату, если только ваш сценарий не требует этого, поэтому переменную$DATEJ
можно просто записать как
DATEJ="2012-03-02 22:00"
Надеемся, что приведенная ниже информация поможет вам или кому-то еще в поиске решения.
Строка даты может иметь формат mm/dd/yyyy hh:mm:ss zzz
или любой эквивалентный. Например,:"06/10/2021 21:00:00 EST"
или "06/10/2021 09:00:00 EST"
Данные TZ являются необязательными.
Вы можете дать следующую команду, чтобы получить временную метку эпохи:
date -d "06/10/2021 00:00:00 EST" +"%s"
ИЛИ
вы можете передать строку в переменной, например:
date_string="06/10/2021 00:00:00 EST"
date -d "$date_string" +"%s"
Для вашей конкретной проблемы должно работать следующее:
date -d '2012-03-02 22:00 EDT' +%s
DATEJ=`echo -n "2012-03-02 22:00"`
echo $DATEJ
date -d "$DATEJ EDT" +%s