2015-08-07 4 views
-2

Я нашел эту тему:Добавление новой строки после определенного количества символов в строке

How to insert a new line character after a fixed number of characters in a file

но ответы там, к сожалению, не поможет мне.

У меня есть эта огромная строка $temp, которую я хочу отрезать после определенного количества символов (например, 20), чтобы соответствовать ей с помощью строки выше. После этого числа символов должно быть добавлено \n, и в конце отформатированная строка должна быть вставлена ​​в переменную. Не должно быть резки, если длина строки < номер.

Сейчас я придерживаюсь

sed -e "s/.\{20\}/&\n/g" <<< $temp 

, но он не работает. Вместо добавления \n это добавление пробелов.

+1

Почему вы не используете принятый ответ в ссылке вы включили? Он работает, когда то, что вы «придерживаетесь», не делает! Также вам нужно уточнить, что вам нужно, потому что, как написано, неясно. Вы также должны предоставить образец того, что хранится 'temp', и пример вашего ожидаемого результата. – user3439894

ответ

0

Самый простой, вероятно, использовать утилиту fold, как это предлагается в потоке, на который вы ссылались. Например:

printf "%s\n" "$temp" | fold -cw 20 

Когда вы говорите:

, чтобы сравнить его с линией над

... Может быть, было бы полезно, чтобы попробовать программу uniq отсеять (или кол-во):

printf "%s\n" "$temp" | fold -cw 20 | uniq 

И, конечно, если вы хотите т выход в новую переменную, завернуть его в $() так:

new="$(printf "%s\n" "$temp" | fold -cw 20 | uniq)" 
+0

Спасибо, первый идеальный! – Damian

0
NewTemp="$(printf "%s" "${temp}" | sed -e 's/.\{20\}/&\ 
/g')" 
  • Ваш СЭД это хорошо, но это всегда немного сложнее, когда источник и назначения совпадают, если приложение не специально взяв это в соответствие (например, вариант -i GNU sed).
  • использовать простые цитаты, если это возможно (не substituion необходимости)
  • я предпочитаю использовать реальную новую строку (если не Onliner) вместо \n к availbel на каждой SED версии (POSIX не позволяет \n в замене образца)
  • просто быть уверенным в значении существующей новой линии в температуры переменная
    • СЕПГ работы линии в каждой строке по умолчанию (так что каждая строка является взять один за другим)
    • при использовании многострочного (опция или загрузки буфера) , новая линия IS als о персонаже брать .
+0

Спасибо, я очень ценю ваши советы! – Damian

Смежные вопросы