procura e substitui 1 ou mais espaços após um período de um arquivo para 2 espaços [fechado]

4

Q: Qual comando você daria para imprimir (exibir na tela) o texto corrigido de userNotes.txt com todos os finais de sentença tendo requerido dois espaços em branco antes do início da próxima sentença?

aqui está o meu código

sed 's/.\s/.\s\s/' 

mas isso também mudou a linha onde terminava com ponto e 2 espaços para ponto e 3 espaços.

    
por Khang Nguyen 28.09.2018 / 16:53

2 respostas

6
sed 's/\.[[:space:]]\{1,\}/.  /g'

Substituiria um ponto (correspondido por \. ou [.] , lembre-se . corresponde a qualquer caractere) seguido por um ou mais caracteres de espaço em branco ( [[:space:]] sendo o equivalente padrão de \s ) com . seguido por dois espaços.

Você também pode fazer isso para ! e ? :

sed 's/\([.!?]\)[[:space:]]\{1,\}/  /g'

Com versões recentes do GNU sed , você pode encurtá-lo para:

sed -E 's/([.!?])\s+/  /g'

Ou com perl :

perl -lne 's/[.!?]\K\s+/  /g'

[[:space:]] e \s correspondem a qualquer caractere de espaço em branco (embora com perl esteja limitado aos caracteres ASCII). Isso inclui caracteres CR, que ocorrem no final das linhas em arquivos de texto do MS-DOS, mas geralmente não são usados como espaçamento. Portanto, esses comandos podem acabar quebrando delimitadores de linha do MS-DOS se aplicados em arquivos formatados do MS-DOS.

Em vez de [[:space:]] / \s , você pode usar [[:blank:]] / \h que não incluem CR ( \h é suportado por perl , mas não o GNU sed ).

    
por 28.09.2018 / 17:09
1

Digamos que seu texto seja salvo em um arquivo chamado 'arquivo' e, em seguida, você use awk da seguinte forma

cat file
this is OK: Turn the knob. Push the \u201con\u201d button. This is not: Turn the knob. Push the \u201con\u201d button.    

awk '$1=$1' OFS=" " file

ou sed da seguinte forma:

sed -E "s/[[:space:]]+/ /g" file
    
por 28.09.2018 / 17:06