Remove apenas uma palavra antes da correspondência de padrões no shell script

1

Entrada:

 int foo(int a, void * b, int c);

Saída:

 int foo(int, void *, int);

Deseja usar "," como padrão para corresponder. Se "," padrão for correspondido, remova a palavra anterior, por exemplo, a , b & c .

    
por Nikita Kodkani 27.04.2014 / 17:55

2 respostas

6

Você poderia usar o lookahead (às vezes chamado de asserção de tamanho zero ) se o mecanismo regex que você está usando suportar, por exemplo usando perl, para combinar e remover sequências não-zero de caracteres de palavra, se e somente se seguido por ,

perl -pe 's/\w+(?=,)//g'

Se você quiser incluir outros caracteres na asserção - como o parêntese direito de término, ) após int c , você pode adicionar isso como parte de uma lista de caracteres [...]

perl -pe 's/\w+(?=[,)])//g'

Se você também quiser remover qualquer espaço em branco, tente

perl -pe 's/\s*\w+(?=[,)])//g'

Juntando tudo, conseguimos

$ echo 'int foo(int a, void * b, int c);' | perl -pe 's/\s*\w+(?=[,)])//g'
int foo(int, void *, int);

Como as versões mais recentes do sed, o perl pode ser feito para operar nos arquivos 'in-loco', adicionando uma opção de linha de comando -i .

    
por 27.04.2014 / 23:18
2

Isso deve ajudar: %código% e se você quiser remover esses espaços feios: sed -e 's/[^ ]\+\([,)]\)//g'

    
por 27.04.2014 / 18:00