Як замінити числа в конкретному поле bash


0

Я використовую 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) *

1
"Чи можна це зробити за допомогою sed або awk?" Так, це можливо з будь-яким. Ви щось пробували?
John1024

так, я намагався, але не успішно.
Да Ні

У вас є незвичайний спосіб підрахунку. Я б сказав, що дата - 3-е поле (час - 4-е).
G-Man

@ G-Man ou так, це правда моя помилка.
Да Ні

Відповіді:


1

Спробуйте:

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

sedКоманди важко пояснити , але в основному:

Він переглядає на початку рядка щось, за яким пробіл, потім воно відповідає одному чи декільком числам (другий стовпець), а потім шляхом зіставлення дати, що відповідає MM-d, а потім пробілом. Потім він виводить їх назад із нулем, вставленим перед одноцифровим днем.


Гаразд, це вирішило проблему. У мене питання, що означає ^\(.* [0-9][0-9]* \)- у дужці щось схоже на значення магазину? /\1\2-0\3 /- збережені значення та порядок друку? \([0-9][0-9]\)-\([0-9]\)- щось на кшталт grep?
Да Ні

Ця перша група, яку ви згадали \(.* [0-9][0-9]* \), використовується \1в результаті. Кожне групування, утворене дужками, \(\)створює нумеровану групу, до якої ми можемо отримати доступ, як \1або \2. Існує багато хороших сайтів для того, щоб навчитися писати регулярні вирази. Цей виглядає багатообіцяючим . Існують деякі відмінності між типовим регулярним виразом та типом, який sedвикористовується, але більшість із них однакові!
Джон Старіч


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

Він шукає цифру від 1 до 9, яку передує дефіс, а далі роздільник слова, фіксує цифру, замінює дефісом, нулем, цифрою.


Остерігайтеся: наявність імен користувачів, таких як salvo-7, може спричинити небажані результати
SΛLVΘ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.