@kavabangaungava

Почему не выполняется сценарий sed?

В книге Уильяма Шоттса, есть такой пример. Файл содержащий имена OS, их версии и даты выхода (вывод сокращен для экономии места). Файл distr.txt (разделитель табуляция):
SUSE    10.2    12/07/2006
Fedora  10      11/25/2008
SUSE    11.0    06/19/2008
Ubuntu  8.04    04/24/2008

в примере используется конструкция sed, которая меняет формат вывода дат с MM/ДД/ГГГГ на ГГГГ-MM-ДД, которая вне сценария выполняется корректно и меняет формат:
sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/' distr.txt

вывод становится таким:
SUSE    10.2    2006-07-12
Fedora  10      2008-25-11
SUSE    11.0    2008-19-06
Ubuntu  8.04    2008-24-04

Так же в книге приведен сценарий sed, который на основе файла distr.txt создает отчет:
1 i\
\
Linux Distributions Report\
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

Данный сценарий сохранен под именем distr.sed

При его выполнении
sed -f distr.sed distr.txt
Должен появится отчет вот такого вида:
Linux Distributions Report
SUSE 10.2 2006-12-07
FEDORA 10 2008-11-25
SUSE 11.0 2008-06-19
UBUNTU 8.04 2008-04-24

Но у меня, он выполняется не корректно, даты мне меняются, и в сам отчет попадает часть сценария sed
Linux Distributions Report
s/([0-9]{2})/([0-9]{2})/([0-9]{4})$/3-1-2/
SUSE    10.2    12/07/2006
FEDORA  10      11/25/2008
SUSE    11.0    06/19/2008
UBUNTU  8.04    04/24/2008
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
У вас лишний обратный слеш (\) после Report

$ cat distr.sed 
1 i\
\
Linux Distributions Report
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

$ sed -f distr.sed distr.txt 

Linux Distributions Report
SUSE    10.2    2006-12-07
FEDORA  10      2008-11-25
SUSE    11.0    2008-06-19
UBUNTU  8.04    2008-04-24
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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