sed correspondência de padrões com exclusão em uma linha

1

Eu quero excluir apenas alguns espaços (digamos 4) após o line$#*425 with space

Não consigo concluir, sugiro

echo "line$#*425 with space          " | sed 's/ / /g'

Estou pensando em usar od -b também, mas ainda não consigo descobrir

como faço isso

OBSERVAÇÃO : espaços podem ser "" normais ou um caractere de tabulação

EDITAR : aqui está como eu fiz um teste para verificar a resposta abaixo

[root@testgfs2 test]$echo -e "line$#*425 with space \t     "  | sed 's/[[:blank:]]\{4\}$//' | od -b
0000000 154 151 156 145 060 052 064 062 065 040 167 151 164 150 040 163
0000020 160 141 143 145 040 011 040 012
0000030

a exclusão está acontecendo não depois da palavra do espaço, mas no final da linha. o caractere de tabulação ( 011 ) ainda está lá

    
por munish 20.02.2013 / 13:54

2 respostas

2

Seu exemplo de código parece não corresponder à sua pergunta. Sua amostra de código não possui agrupamentos, portanto, e não fazem referência a nada. Aqui está o que parece que você está pedindo:

sed 's/space[[:blank:]]\{4\}/space/' <<< "line$#*425 with space          "
    
por 20.02.2013 / 14:12
1

Coloque as partes que você deseja manter em um grupo. Não se esqueça de citar os caracteres que precisam ser citados no regex ( \[.*^$ ).

sed -e 's/\(line\$#\*425 with space\)[ \t][ \t][ \t][ \t]//'

Se o seu sed não suportar \t para significar um caractere de tabulação, substitua \t por um caractere de tabulação literal.

    
por 21.02.2013 / 02:28