torr: remova espaço em branco extra para espaços em branco únicos entre cadeias, deixando as guias principais intactas

0

Eu tenho um código:

1 /**             
2 a        b         c
3 **/
4 int main() {
5     int x;
6     if ( condition) {
7     return       x;
8     }
9 }

Eu preciso alterar vários espaços em branco entre tokens ou strings para espaços em branco únicos, por exemplo, na linha 7, mas os comentários (linha 2) não devem ser afetados nem as guias principais no código. Então, a saída deve ser:

1 /**             
2 a        b         c
3 **/
4 int main() {
5     int x;
6     if ( condition) {
7     return x;
8     }
9 }

Eu tentei usar 'tr': ~$ tr -s " " < file , mas ele mudou a linha 2 e removeu as guias principais da linha 5 para a linha 8. Isso pode ser feito usando sed ?

    
por MelB 24.09.2018 / 05:27

2 respostas

0

Quão longe

sed -rn '\#/\*\*#,\#\*\/*# {p;b}; s/([^ ]) +/ /g; p' file

você? Ele imprime as linhas de comentário não modificadas (não pode lidar com comentários on / off na mesma linha, embora) e pula o resto do script. Para linhas não comentadas, ele aperta qualquer espaço múltiplo após um caractere não espacial (portanto, o recuo da linha está fora do escopo) em um único espaço.

    
por 25.09.2018 / 22:44
0

Finalmente, isso funcionou para mim:

sed -i 's/\([a-zA-Z]\+\)\( *\)\([a-zA-Z]\+\)/ /g' $1

    
por 26.09.2018 / 12:07