Разделите строку на части фиксированного размера, используя sed - PullRequest
0 голосов
/ 30 апреля 2018

У меня вопрос - я пытаюсь разделить переменную, хранящуюся в фиксированном размере, на 5 символов и ставить «%» после каждой 5. буквы, с:

echo "$d" | sed 's/.\{5\}/&%/g'

Что дает мне это, если хранимая переменная в $d равна HELLOWOLRD123

HELLO%WORLD%123

Как мне получить автоматическое заполнение, %%, чтобы он сохранил фиксированный размер как 5?

Итак, мой вывод HELLO%WOLRD%123%%%

Ответы [ 4 ]

0 голосов
/ 01 мая 2018

Один в awk:

$ echo HELLOWOLRD123 | 
  awk '{gsub(/.{1,5}/,"&%");while(length($0)%6)sub(/$/,"%")}1'
HELLO%WOLRD%123%%%

Объяснил некоторые:

$ echo HELLOWOLRD123 | 
  awk '{
      gsub(/.{1,5}/,"&%")   # add % after every 5 chars
      while(length($0)%6)   # while length of string mod 6 is not 0
          sub(/$/,"%")      # add a & to it
  }1'
HELLO%WOLRD%123%%%
0 голосов
/ 30 апреля 2018

Если perl в порядке

$ echo 'HELLOWOLRD123' | perl -pe 's/.{1,5}/$& . "%" x (6-length($&))/ge'
HELLO%WOLRD%123%%%
  • .{1,5} жадное совпадение от 1 до 5 символов
  • e этот модификатор позволяет нам использовать Perl-код в разделе замены
  • $& подходящая строка
  • . конкатенация строк
  • "%" x (6-length($&)) здесь x - оператор повторения строк
0 голосов
/ 30 апреля 2018

с седом

echo 'HELLOWOLRD123' | sed -E '
s/(.{5})/&%/g
s/%...$/&%%%/
t
s/%..$/&%%%%/
t
s/%.$/&%%%%%/'

или с петлей

echo 'HELLOWOLRD123' | sed -E '
s/(.{5})/&%/g
/%$/b
:A
/%.{6}$/!{
  s/$/#/
  bA
}
:B
  s/(.*%[^#]*)#(.*$)/\1%\2/
  tB'
0 голосов
/ 30 апреля 2018

Вот, пожалуйста:

echo $(echo -n "$d"; printf "%`echo $(((5 - (${#d} % 5)) % 5))`s" | tr ' ' '%') | sed 's/.\{5\}/&%/g'

EDIT:

Для Mac (который не поддерживает echo -n)

echo $(printf "$d"; printf "%`echo $(((5 - (${#d} % 5)) % 5))`s" | tr ' ' '%') | sed 's/.\{5\}/&%/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...