2

Как я могу использовать sed, чтобы изменить формат вывода текстового файла?

Мой текстовый файл содержит и отображает это, когда я вызываю cat:

9/27/2002
9/28/2002
10/1/2002
10/2/2002
10/10/2002
10/11/2002
12/29/2002
1/1/2003
1/2/2003

Я хочу, чтобы он отображался следующим образом с помощью sed (с удалением '/', добавлением пробела и добавлением нулей к дням и месяцам):

2002 09 27
2002 09 28
2002 10 01
2002 10 02
2002 10 10
2002 10 11
2002 12 29
2003 01 01
2003 01 02

Любая помощь будет высоко ценится!

3 ответа3

3

Используйте группы захвата. Первая часть меняет порядок чисел, вторая добавляет нули ко вторым столбцам, третья добавляет нули к третьему.

sed -e 's=\(.*\)/\(.*\)/\(.*\)=\3 \1 \2=' -e 's= \(.\) = 0\1 =' -e 's= \(.\)$= 0\1='
3

У вас есть хорошее решение sed от @chorba, вот как вы можете сделать это с помощью awk:

awk -F/ '{printf "%d %02d %02d\n", $3, $1, $2}'
1

Если вы можете принять не-sed решение проблемы (зачем ограничивать себя в sed?), Вот каноническое решение perl , в дополнение к awk :

perl -laF/ -ne 'printf "%s %02d %02d\n", @F[2,0,1]'

Объяснение:

-a    auto-splits the input into the array @F
-l    strips newline on input
-F/   defines input delimiter to split on
-n    loops over all lines of input
-e    perl expression to run in each loop pass

printf       self explanatory

Вы можете передать свои данные либо в виде имен файлов после вызова perl, либо через стандартный ввод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .