Добавить суффикс к совпадающему регулярному выражению

Попробуйте

альт + забой

В elementary OS это работает так, как вы хотите (так же, как ctrl + backspace)

2
11.03.2020, 12:46
2 ответа

Почти готово:

$ sed -E 's/^([0-9][0-9][0-9])\./\100./' file 
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
3
28.04.2021, 23:21

Ваша команда sedвставляет два нуля после трех цифр и еще один символ в начале каждой строки. .соответствует «любому символу». Даже если вы экранировали точку как \., чтобы она соответствовала реальной точке, вы бы вставили два нуля после точки.

Небольшая настройка заставит его работать:

$ sed 's/^\([0-9]\{3\}\)\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69

или, если ваш sedподдерживает расширенные регулярные выражения (, большинство из них в настоящее время):

$ sed -E 's/^([0-9]{3})\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69

Использование awkи более общий подход:

$ awk -F. 'BEGIN { OFS=FS } length($1) < 5 { $1 = sprintf("%s%.*d", $1, 5 - length($1), 0) }; 1' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69

Эта команда awkбудет для каждой записи в первом столбце, разделенном точками -длиной менее пяти символов, заполнить строку необходимым количеством нулей, чтобы общая длина строки стала равной пяти. персонажи.

Это делается путем форматирования целого числа 0как строки, заполненной нулями, до недостающей длины. Затем они объединяются с существующими данными в поле.

Это будет работать для любой короткой строки в первом поле (, а не только для строк, содержащих три символа ).

Заполнение нулями в начале строки проще (но не то, что просили,предоставлено):

$ awk -F. 'BEGIN { OFS=FS } { $1 = sprintf("%.5d", $1) }; 1' file
46066.874.89
48569.123.56
56489.256.88
00654.12.32
84689.25.69

Мы просто используем тот факт, что первое поле содержит целое число, и форматируем его с sprintf()как заполненное нулем -целое число правильной ширины.

В обеих командах 1в конце вызывает действие по умолчанию, которое заключается в печати текущей строки. (ее можно заменить на { print }или{ print $0 }).

1
28.04.2021, 23:21

Теги

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