vim или sed / awk / etc - дополняет все строки пробелами до фиксированной ширины - PullRequest
18 голосов
/ 22 февраля 2012

Как я могу дополнить каждую строку файла определенной шириной (скажем, шириной 63 символа), при необходимости добавив пробелы?

Пока давайте предположим, что все строки гарантированно будут содержать менее 63 символов.

Я использую vim и предпочел бы способ сделать это там (есть какая-то команда printf %63s current_line?), Где я могу выбрать строки, к которым я хочу применить отступ.

Однако я, безусловно, открыт для использования sed, awk или какого-либо инструмента linux для выполнения этой работы.

веселит.

Ответы [ 7 ]

31 голосов
/ 22 февраля 2012

vim

:%s/.*/\=printf('%-63s', submatch(0))
23 голосов
/ 22 февраля 2012
awk '{printf "%-63s\n", $0}' testfile > newfile
7 голосов
/ 23 февраля 2012

В Vim я бы использовал команду

:%s/$/\=repeat(' ',64-virtcol('$'))

Если текст для пэда предназначен только для ASCII и не содержит символов табуляции, можно использовать col() вместо virtcol().

1 голос
/ 22 февраля 2012

С седом, без петли:

sed -i '/.\{63\}/!{s/$/                                                                /;s/^\(.\{63\}\).*/\1/}' file

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

1 голос
/ 22 февраля 2012

Просто для удовольствия, версия Perl:

perl -lpe '$_ .= " " x (63 - length $_)'
1 голос
/ 22 февраля 2012

Это может работать для вас:

sed -i ':a;/.\{63\}/!{s/$/ /;ba}' file

или, возможно, более эффективный, но менее элегантный:

sed -i '1{x;:a;/.\{63\}/!{s/^/ /;ba};x};/\(.\{63\}\).*/b;G;s//\1/;y/\n/ /' file
0 голосов
/ 07 октября 2015

Другое решение Perl:

perl -lne 'printf "%-63s\n", $_' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...