Estou preso em incluir expressões regulares com um comando sed.
P: Quero substituir todas as ocorrências de dois espaços após o final de uma frase por apenas uma vez.
Aqui está o que eu fiz:
sed 's/^ $/^$/' file
E não substituiu dois espaços por um espaço após o término da frase.
Saída que recebo:
This is the output. Hello Hello
Saída que eu quero:
This is the output. Hello Hello
text-processing
sed
Zeus
fonte
fonte
Respostas:
substitua o ponto seguido por dois ou mais espaços pelo ponto seguido por um único espaço.
fonte
sed -r 's/\.\s+/. /g' file
com o GNU sed ...sed -E
vez desed -r
. Isso funciona com o GNU sed e o * BSD sed (incluindo o Mac OS X) e alguns outros. Está programado para inclusão como padrão no POSIX "em breve".sed -E
a alguém neste site que não funcionou, massed -r
funcionou .. Eu trabalhei com o GNU sed sozinho, então nenhuma idéia sobre POSIX e outras variações .. tentará incluir esses detalhes no futuro , graças :)-E
por um bom tempo agora (pelo menos desde 2011, mas as páginas man e info ainda só mencionar-r
)Seu
sed
comando's/^ $/^$/'
não fará o que você deseja. Apenas substitui todas as linhas que contêm um espaço por uma linha que contém^$
.Depende dos caracteres que marcam o final da frase, você pode fazer:
Isso irá substituir 2 ou mais espaços depois
.
,?
ou!
com apenas um espaço.fonte
sed -r 's/([.?!])\s+/\1 /g' file
sed
script de edição original substituirá qualquer linha que contenha um único espaço pela string literal^$
.É isso que você pode estar procurando,
Amostra,
Usando
sed
,fonte