Correspondência de padrões e remoção desse padrão usando sed

1

Eu tenho 2 arquivos com os seguintes nomes:

Arquivo 1: RvA_X-IRB-bil-CA101-0 + 010000-20150327212332-055582-P

Arquivo 2: RvA_X-IRB-bil-CA101-1 + 020000-20150327212332-055582-P

Estou usando este comando para combinar e substituir certas partes dos nomes de arquivos.

printf "%s\n" RvA_X-IRB-bil*P | sed -e 's/\(RvA_X-IRB\)-\bil-\(CA.*\)-
printf "%s\n" RvA_X-IRB-bil*P | sed -e 's/\(RvA_X-IRB\)-\bil-\(CA.*\)-+020000-\([0-9]\{8\}\).*-\([0-9]\{6\}\).*$/mv & ---/'
+010000-\([0-9]\{8\}\).*-\([0-9]\{6\}\).*$/mv & ---/'

O comando acima mencionado funciona bem para o arquivo 1, mas quando modifico o comando para trabalhar no arquivo 2, ele não funciona. O comando para o segundo nome de arquivo é dado abaixo:

printf "%s\n" RvA_X-IRB-bil*P | sed -e 's/\(RvA_X-IRB\)-\bil-\(CA.*\)-
printf "%s\n" RvA_X-IRB-bil*P | sed -e 's/\(RvA_X-IRB\)-\bil-\(CA.*\)-+020000-\([0-9]\{8\}\).*-\([0-9]\{6\}\).*$/mv & ---/'
+010000-\([0-9]\{8\}\).*-\([0-9]\{6\}\).*$/mv & ---/'

A única coisa que eu mudei é essa parte %code%+010000-\

    
por Zeeshan Sabir 31.03.2015 / 15:30

1 resposta

1

Com sua expressão regular, você está reconhecendo:

"RvA_X-IRB-IL-CA101-RvA_X-IRB + 020000-20150327212332-055582-P"

em parte porque você está usando \ 1 como outros apontaram. Observe o repetido "RvA_X-IRB".

No entanto, pode ser importante notar que você está usando "\ b" também, e isso funcionará somente quando você tiver um caractere "sem palavra" em um lado e um caractere "palavra" em o outro. link

Não tenho certeza se isso é intencional, e é por isso que omiti o "b" em "-bil". Na verdade, estou surpreso que seu RE esteja funcionando no primeiro caso. Por exemplo:

echo "-bil" | sed 's#-\bil#GETIT#'
-bil

echo "-il" | sed 's#-\bil#GETIT#'
GETIT

Ou:

printf "%s\n" RvA_X-IRB-bil | sed 's/\(RvA_X-IRB\)-\bil/GETIT/'
RvA_X-IRB-bil

printf "%s\n" RvA_X-IRB-il | sed 's/\(RvA_X-IRB\)-\bil/GETIT/'
GETIT
    
por 31.03.2015 / 19:06