Tente isto:
sed -i -e 's/.\{80\}/&\r\n/g' \
-e 's/$/################################################################################/' \
-e 's/\(\r\n.\{80\}\)#*$//' "C:\Folder\test.txt"
(eu quebrei o comando em várias linhas
apenas por legibilidade na apresentação; você pode fazer tudo em uma linha.)
O s/$/###…###/
acrescenta 80% dos caracteres#
,
e, em seguida, o s/\(\r\n.\{80\}\)#*$//
procura essa sequência:
-
\r\n
- 80 de qualquer caractere
- qualquer número de
#
s - até o final do buffer
e o substitui pelo grupo formado pelas duas primeiras balas.
Em outras palavras,
mantém os caracteres n que são a última linha do arquivo
e os 80- n #
caracteres que o seguem,
e descarta os caracteres n #
que os seguem.
Depois de verificar se isso funciona,
basta alterar todas as ocorrências de #
no comando acima para espaços.
OP's Final Working Solution
NOTE: The
SET s10=
line has 10 empty spaces in it to the right of the equal sign.Batch Script
@ECHO ON SET File=C:\Folder\test.txt ::: The below s10 variable equals ten white\empty spaces - so it has 10 blank spaces in it SET s10= SET s40=%s10%%s10%%s10%%s10% SET s80=%s40%%s40% sed -i -e "s/.\{80\}/&\r\n/g" -e "s/$/%s80%/" -e "s/\(\r\n.\{80\}\)\s*$//" "%File%" GOTO :EOF
Podemos tornar isso um pouco mais fácil de ler e menos tedioso para digitar.
-
Pure sed
Se o seu texto é todo alfanumérico, e há algum caractere (como
@
) que nunca aparecerá nos seus dados então você pode fazer algo assim:-e 's/$/@@@@@@@@@@/' \ # Append 10 @ characters to the line. -e 's/@/ /g' \ # Change each @ to eight spaces.
Se você quiser tornar seu script legível, ao custo de torná-lo um pouco mais detalhado, dê um passo adiante:
-e 's/$/@@@@@@@@@@/' \ # Append 10 @ characters to the line. -e 's/@/@@@@@@@@/g' \ # Change each @ to eight @s (there are now 80 @s). -e 's/@/ /g' \ # Change each of the 80 @s to a space.
Se não houver um caractere único que nunca apareça nos seus dados, mas há alguns (curtos) caracteres seqüência , como
()
, que nunca aparece, você pode usar o mesmo princípio:-e 's/$/()()()()()()()()()()/' \ # Append 10 () pairs to the line. -e 's/()/ /g' \ # Change each () to eight spaces.
Tenha cuidado ao lidar com personagens que são especiais em expressões regulares; por exemplo,
.
,*
,[
,^
,&
etc. (E não inclua os#
-comments no seu script nesses locais; para quebrar um comando simples em várias linhas, o\
deve ser o último caractere na linha (antes da nova linha) e não em um comentário.)
-
Usando o shell
Mesmo princípio:
#!/bin/sh ︙ s=" " # Set $s to 10 spaces. s80="$s$s$s$s$s$s$s$s" # Set $s80 to 8 copies of $s; i.e., 80 spaces. ︙ sed -i -e 's/.\{80\}/&\r\n/g' \ -e 's/$/'"$s80"'/' \ -e 's/\(\r\n.\{80\}\)\s*$//' "C:\Folder\test.txt"