Я использую FreeBSD 3.2-RELEASE. Например вывод из last -

abelovsk14 1 10-7 22:06
adamov14 5 10-5 22:53
almasi14 1 10-8 22:56
anda13 53 10-6 22:16
andrejko14 51 10-7 01:28

Можно заменить поле $4 на это-

abelovsk14 1 10-07 22:06
adamov14 5 10-05 22:53
almasi14 1 10-08 22:56
anda13 53 10-06 22:16
andrejko14 51 10-07 01:28

Поле $4 - это дни. Я хочу заменить день значением, например - 1 на значение 01 Возможно ли это сделать с помощью sed или awk ?

1-01
2-02
3-03
..
9-09
10-10
..
  • info-abelovsk14(пользователь) 1(numberofnightlogintoserver) 10(месяц) -7(день) 22:06(lastnightlogin) *

3 ответа3

1

Дайте этому шанс:

last | sed 's/^\(.* [0-9][0-9]* \)\([0-9][0-9]\)-\([0-9]\) /\1\2-0\3 /'

Сложно объяснить команды sed , но в основном:

Он ищет в начале строки что-то, за которым следует пробел, затем он совпадает с одним или несколькими числами (во втором столбце), затем сопоставляя дату, соответствующую MM-d, за которой следует пробел. Затем он выводит их обратно с нулем, вставленным перед днем, состоящим из одной цифры.

0
last | sed 's/-\([1-9]\)\>/-0\1/'

Он ищет цифру от 1 до 9, перед которой стоит дефис, за которой следует разделитель слов, фиксирует цифру, заменяет дефис, ноль, цифру.

0

попробуйте следующее:

last | sed 's/^\(\s*\S\+\s\+\S\+\s\+[0-9]\+-\)\([0-9]\s.*\)$/\10\2/'

PD: я использую Linux.

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