Как заполнять символы только в sed

У меня есть этот файл. Я хочу использовать только sed, no awk

FSDFDSFSD FDSFD FHGDHFDHGHFGHGHGF HHGDF GFDGDFGFDG GFDGFDGFDGDFGDGD 

Я хочу заполнить каждую нечетную строку, добавленную до 000, так что общее число символов равно 30 в каждой строке

Я хочу, чтобы

 FSDFDSFSD0000000000 FDSFD FHGDHFDHGHFGHGHGF00 HHGDF GFDGDFGFDG000000000 GFDGFDGFDGDFGDGD 

  • удалить всю строку с sed?
  • sed удаляет символы из новой строки
  • Как использовать Sed для замены всех символов перед двоеточием?
  • Является ли моя интерпретация `sed -i.bak '/ ^ x / d'" $ SOME_FILE "правильной?
  • Sed Пояснение: sed '/./$$!d' файл
  • итерации через файлы ('для файла в ...), а также включить подкаталоги?
  • Как удалить пустые комментарии с помощью sed?
  • Как удалить определенную строку и следующую пустую строку с помощью GNU sed?
  • 2 Solutions collect form web for “Как заполнять символы только в sed”

    В одну сторону:

     sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -en file 

    Соответствует любому символу (.) И соответствует от 1 до 29 символов одного типа (1,29). Если совпадение выполнено успешно, поставьте «0» за шаблон, сопоставленный ( & ). Когда совпадение заканчивается, это означает, что если количество символов, исключающих первый символ, превышает 29, остановите его, и, следовательно, мы получим нулевую строку с шагом 30.

    n в конце просто читает следующую строку и печатает ее. Таким образом, четные строки печатаются нетронутыми.

    Выполнение вышеуказанного скрипта:

     $ sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -en file FSDFDSFSD000000000000000000000 FDSFD FHGDHFDHGHFGHGHGF0000000000000 HHGDF GFDGDFGFDG00000000000000000000 GFDGFDGFDGDFGDGD 

    Другой подход:

     sed 's/$/000000000000000000000000000000/;s/\(.\{30\}\).*/\1/;n' 

    Это будет быстрее, чем итеративный подход при добавлении одного символа за раз, но обратите внимание, что он урезает линии, длина которых превышает 30 символов.

    Linux и Unix - лучшая ОС в мире.