Как заполнять символы только в sed
У меня есть этот файл. Я хочу использовать только sed, no awk
FSDFDSFSD FDSFD FHGDHFDHGHFGHGHGF HHGDF GFDGDFGFDG GFDGFDGFDGDFGDGD
Я хочу заполнить каждую нечетную строку, добавленную до 000, так что общее число символов равно 30 в каждой строке
- Заменить последовательность символов одинаковым количеством символов
- Как я могу поменять значение на строке?
- Поиск строки и удаления до появления следующего символа
- найти поле и переместить его до конца строки
- Добавить символ табуляции в начало файла без возврата строки
Я хочу, чтобы
FSDFDSFSD0000000000 FDSFD FHGDHFDHGHFGHGHGF00 HHGDF GFDGDFGFDG000000000 GFDGFDGFDGDFGDGD
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 символов.