Ответ 1
vim
:%s/.*/\=printf('%-63s', submatch(0))
Как я могу поместить каждую строку файла на определенную ширину (скажем, 63 символа в ширину), заполняя пробелы, если нужно?
Теперь предположим, что все строки гарантированно составляют менее 63 символов.
Я использую vim и предпочитаю способ сделать это там (есть ли какая-то команда printf %63s current_line
?), где я могу выбрать строки, к которым я хочу применить дополнение.
Тем не менее, я, конечно, открыт для использования sed, awk или какого-то средства linux для выполнения этой задачи.
приветствий.
vim
:%s/.*/\=printf('%-63s', submatch(0))
awk '{printf "%-63s\n", $0}' testfile > newfile
В Vim я бы использовал команду
:%s/$/\=repeat(' ',64-virtcol('$'))
Если текст для пэдов является ASCII-only и не содержит символов табуляции, это
можно использовать col()
вместо virtcol()
.
С sed, без цикла:
sed -i '/.\{63\}/!{s/$/ /;s/^\(.\{63\}\).*/\1/}' file
Убедитесь, что в первой подстановке достаточно пробелов, чтобы соответствовать количеству пространства, которое вы хотите добавить.
Просто для удовольствия, версия Perl:
perl -lpe '$_ .= " " x (63 - length $_)'
Это может сработать для вас:
sed -i ':a;/.\{63\}/!{s/$/ /;ba}' file
или, возможно, более эффективный, но менее элегантный:
sed -i '1{x;:a;/.\{63\}/!{s/^/ /;ba};x};/\(.\{63\}\).*/b;G;s//\1/;y/\n/ /' file
Другое решение для Perl:
perl -lne 'printf "%-63s\n", $_' file