Regex condicional

0

No meu arquivo de código eu tenho várias linhas como T V= X T(A); E eu quero que o texto depois de = seja substituído como X(T,A) com alguma ajuda Eu tenho esse padrão s/X\s+([^\(]*)\(/X(,/g; para encontrar e substituí-lo funciona muito bem problema é quando não temos args para passar por T Ex. T V= X T(); então depois da substituição será como X(T,) (veja a vírgula extra) Eu sabia que era por causa de /X(, alguém pode me ajudar a se livrar desse extra vírgula, infelizmente eu não sou nenhum cara de regex.

Existe algum tipo de condicional que poderíamos ter a dizer se o () estiver vazio, em seguida, faça X(/g em vez de /X(,/g

    
por Explorer_N 30.01.2017 / 20:13

2 respostas

1

Algo como isso deve ser feito, se você executá-lo no (s) arquivo (s) após ter executado a primeira substituição que introduz o erro:

sed 's/X(\([^,]*\),)/X()/g'

Ele substituirá X(<something-not-a-comma>,) por X(<something-not-a-comma>) .

Para fazer as duas substituições de uma só vez:

sed -e 'the first substitution' -e 'the second substitution'
    
por 30.01.2017 / 20:18
1

@Kusalananda Parece que ele está usando a regex estendida sem a opção -E em seu primeiro comando de substituição em

sed -e 's/X\s+([^\(]*)\(/X(,/g' -e 's/X(\([^,]*\),)/X()/g' ./file

Mas o segundo comando parece bem. Fazendo tudo no Regex estendido, isso funcionará

sed -Ee 's/X\s+([^\(]*)\(/X(,/g;s/X\(([^,]*),\)/X()/g' ./file
    
por 30.01.2017 / 21:14